New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 7731 for branches/UKMO/dev_r5518_v3.6_asm_nemovar_community/NEMOGCM/EXTERNAL/AGRIF/LIB/WorkWithlistvarindoloop.c – NEMO

Ignore:
Timestamp:
2017-02-23T14:23:32+01:00 (7 years ago)
Author:
dford
Message:

Merge in revisions 6625:7726 of dev_r5518_v3.4_asm_nemovar_community, so this branch will be identical to revison 7726 of dev_r5518_v3.6_asm_nemovar_community.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_v3.6_asm_nemovar_community/NEMOGCM/EXTERNAL/AGRIF/LIB/WorkWithlistvarindoloop.c

    r7730 r7731  
    3434/******************************************************************************/ 
    3535#include <stdio.h> 
    36 #include <stdlib.h> 
    37 #include <string.h> 
     36//#include <stdlib.h> 
     37//#include <string.h> 
    3838 
    3939#include "decl.h" 
     
    4747/*                                                                            */ 
    4848/******************************************************************************/ 
    49 void Add_UsedInSubroutine_Var_1 (char *ident) 
     49void Add_UsedInSubroutine_Var_1 (const char *ident) 
    5050{ 
    5151  listvar *newvar; 
     
    5959  if ( !List_UsedInSubroutine_Var ) 
    6060  { 
    61       newvar=(listvar *)malloc(sizeof(listvar)); 
    62       newvar->var=(variable *)malloc(sizeof(variable)); 
     61      newvar=(listvar *)calloc(1,sizeof(listvar)); 
     62      newvar->var=(variable *)calloc(1,sizeof(variable)); 
    6363      /*                                                                      */ 
    6464      Init_Variable(newvar->var); 
     
    6666      newvar->suiv = NULL; 
    6767      strcpy(newvar->var->v_nomvar,ident); 
    68  
    69       Save_Length(ident,4); 
    7068      strcpy(newvar->var->v_modulename,curmodulename); 
    71       Save_Length(curmodulename,6); 
    72      printf("ICI %d\n",newvar->var->v_module); 
    73  
    74       strcpy(newvar->var->v_commoninfile,mainfile); 
    75       Save_Length(mainfile,10); 
     69      strcpy(newvar->var->v_commoninfile,cur_filename); 
    7670      strcpy(newvar->var->v_subroutinename,subroutinename); 
    77       Save_Length(subroutinename,11); 
    7871      newvar->var->v_pointedvar=pointedvar; 
    7972      List_UsedInSubroutine_Var = newvar ; 
    80        printf("jaoute %s\n",newvar->var->v_nomvar); 
    8173  } 
    8274  else 
     
    9486      if ( out == 0 ) 
    9587      { 
    96          newvar=(listvar *)malloc(sizeof(listvar)); 
    97          newvar->var=(variable *)malloc(sizeof(variable)); 
     88         newvar=(listvar *)calloc(1,sizeof(listvar)); 
     89         newvar->var=(variable *)calloc(1,sizeof(variable)); 
    9890         /*                                                                   */ 
    9991         Init_Variable(newvar->var); 
    10092         /*                                                                   */ 
    10193         strcpy(newvar->var->v_nomvar,ident); 
    102  
    103          Save_Length(ident,4); 
    104          strcpy(newvar->var->v_commoninfile,mainfile); 
    105          Save_Length(mainfile,10); 
     94         strcpy(newvar->var->v_commoninfile,cur_filename); 
    10695         strcpy(newvar->var->v_modulename,curmodulename); 
    107          Save_Length(curmodulename,6); 
    108        printf("ICI %d\n",newvar->var->v_module); 
    10996         strcpy(newvar->var->v_subroutinename,subroutinename); 
    110          Save_Length(subroutinename,11); 
    11197         newvar->var->v_pointedvar=pointedvar; 
    11298         newvar->suiv = List_UsedInSubroutine_Var; 
    113          printf("jaoute %s\n",newvar->var->v_nomvar); 
    114          List_UsedInSubroutine_Var = newvar;         
     99         List_UsedInSubroutine_Var = newvar; 
    115100      } 
    116101  } 
     
    134119  if ( !List_UsedInSubroutine_Var ) 
    135120  { 
    136       newvar=(listvar *)malloc(sizeof(listvar)); 
    137       newvar->var=(variable *)malloc(sizeof(variable)); 
     121      newvar=(listvar *)calloc(1,sizeof(listvar)); 
     122      newvar->var=(variable *)calloc(1,sizeof(variable)); 
    138123      /*                                                                      */ 
    139124      Init_Variable(newvar->var); 
     
    141126      newvar->suiv = NULL; 
    142127      strcpy(newvar->var->v_nomvar,name); 
    143  
    144       Save_Length(name,4); 
    145128      strcpy(newvar->var->v_modulename,curmodulename); 
    146       Save_Length(curmodulename,6); 
    147       strcpy(newvar->var->v_commoninfile,mainfile); 
    148       Save_Length(mainfile,10); 
     129      strcpy(newvar->var->v_commoninfile,cur_filename); 
    149130      strcpy(newvar->var->v_subroutinename,subroutinename); 
    150       Save_Length(subroutinename,11); 
    151131      newvar->var->v_pointedvar=pointedvar; 
    152132      List_UsedInSubroutine_Var = newvar ; 
     
    183163      if ( out == 2 || out == 0 ) 
    184164      { 
    185          newvar=(listvar *)malloc(sizeof(listvar)); 
    186          newvar->var=(variable *)malloc(sizeof(variable)); 
     165         newvar=(listvar *)calloc(1,sizeof(listvar)); 
     166         newvar->var=(variable *)calloc(1,sizeof(variable)); 
    187167         /*                                                                   */ 
    188168         Init_Variable(newvar->var); 
    189169         /*                                                                   */ 
    190170         strcpy(newvar->var->v_nomvar,name); 
    191  
    192          Save_Length(name,4); 
    193171         strcpy(newvar->var->v_modulename,curmodulename); 
    194          Save_Length(curmodulename,6); 
    195          strcpy(newvar->var->v_commoninfile,mainfile); 
    196          Save_Length(mainfile,10); 
     172         strcpy(newvar->var->v_commoninfile,cur_filename); 
    197173         strcpy(newvar->var->v_subroutinename,subroutinename); 
    198          Save_Length(subroutinename,11); 
    199174         newvar->var->v_pointedvar=pointedvar; 
    200175 
     
    254229void  CompleteThelistvarindoloop() 
    255230{ 
    256   listvar *newvar; 
    257   listvarpointtovar *pointtmplist; 
    258   listcouple *coupletmp; 
    259   int outvar; 
    260  
    261   pointtmplist = List_CouplePointed_Var; 
    262   while ( pointtmplist ) 
    263   { 
    264       coupletmp = pointtmplist->t_couple; 
    265       while ( coupletmp ) 
    266       { 
    267          newvar = List_UsedInSubroutine_Var; 
    268          outvar = 0 ; 
    269          while ( newvar && outvar == 0) 
    270          { 
    271            /* we should find the same variable name in the same subroutine    */ 
    272            if ( !strcasecmp(newvar->var->v_nomvar,coupletmp->c_namevar) && 
    273                 !strcasecmp(newvar->var->v_subroutinename, 
    274                                        pointtmplist->t_cursubroutine) && 
    275                  strcasecmp(coupletmp->c_namepointedvar,"") 
    276               ) 
    277            { 
    278               outvar = 1; 
    279               strcpy(newvar->var->v_oldname,newvar->var->v_nomvar); 
    280               strcpy(newvar->var->v_nomvar,coupletmp->c_namepointedvar); 
    281            } 
    282            else 
    283            { 
    284               newvar = newvar->suiv; 
    285            } 
    286          } 
    287          coupletmp = coupletmp->suiv; 
    288      } 
    289      pointtmplist = pointtmplist->suiv; 
    290   } 
    291 } 
    292  
    293 /******************************************************************************/ 
    294 /*                             CopyRecord                                     */ 
     231    listvar *newvar; 
     232    listvarpointtovar *pointtmplist; 
     233    listcouple *coupletmp; 
     234    int outvar; 
     235 
     236    pointtmplist = List_CouplePointed_Var; 
     237    while ( pointtmplist ) 
     238    { 
     239        coupletmp = pointtmplist->t_couple; 
     240        while ( coupletmp ) 
     241        { 
     242            newvar = List_UsedInSubroutine_Var; 
     243            outvar = 0 ; 
     244            while ( newvar && outvar == 0) 
     245            { 
     246                /* we should find the same variable name in the same subroutine    */ 
     247                if ( !strcasecmp(newvar->var->v_nomvar, coupletmp->c_namevar) && 
     248                     !strcasecmp(newvar->var->v_subroutinename, pointtmplist->t_cursubroutine) && 
     249                      strcasecmp(coupletmp->c_namepointedvar, "") ) 
     250                { 
     251                    outvar = 1; 
     252                    strcpy(newvar->var->v_oldname, newvar->var->v_nomvar); 
     253                    strcpy(newvar->var->v_nomvar, coupletmp->c_namepointedvar); 
     254                } 
     255                else 
     256                { 
     257                    newvar = newvar->suiv; 
     258                } 
     259            } 
     260            coupletmp = coupletmp->suiv; 
     261        } 
     262        pointtmplist = pointtmplist->suiv; 
     263    } 
     264} 
     265 
     266/******************************************************************************/ 
     267/*                             Merge_Variables                                */ 
    295268/******************************************************************************/ 
    296269/*                                                                            */ 
    297270/******************************************************************************/ 
    298 void CopyRecord(variable *var1,variable *var2) 
    299 { 
    300    if ( !strcasecmp(var1->v_typevar,"") ) 
    301                                         strcpy(var1->v_typevar,var2->v_typevar); 
    302    else strcpy(var2->v_typevar,var1->v_typevar); 
    303  
    304    if ( !strcasecmp(var1->v_oldname,"") ) 
    305                                         strcpy(var1->v_oldname,var2->v_oldname); 
    306    else strcpy(var2->v_oldname,var1->v_oldname); 
    307  
    308    if ( !strcasecmp(var1->v_dimchar,"") ) 
    309                                         strcpy(var1->v_dimchar,var2->v_dimchar); 
    310    else strcpy(var2->v_dimchar,var1->v_dimchar); 
    311  
    312    if ( !strcasecmp(var1->v_commonname,"") ) 
    313                                   strcpy(var1->v_commonname,var2->v_commonname); 
    314    else strcpy(var2->v_commonname,var1->v_commonname); 
    315     
    316    printf("modulenameII = %s %s %d %s\n",var1->v_modulename,var2->v_modulename,var1->v_module,var1->v_nomvar); 
    317  
    318    if ( !strcasecmp(var1->v_modulename,"") || (var1->v_module ==0)) 
    319                                   strcpy(var1->v_modulename,var2->v_modulename); 
    320    else strcpy(var2->v_modulename,var1->v_modulename); 
    321  
    322    if ( !strcasecmp(var1->v_vallengspec,"") ) 
    323                                 strcpy(var1->v_vallengspec,var2->v_vallengspec); 
    324    else strcpy(var2->v_vallengspec,var1->v_vallengspec); 
    325  
    326    if ( !strcasecmp(var1->v_nameinttypename,"") ) 
    327                         strcpy(var1->v_nameinttypename,var2->v_nameinttypename); 
    328    else strcpy(var2->v_nameinttypename,var1->v_nameinttypename); 
    329            
    330    if ( !strcasecmp(var1->v_commoninfile,"") ) 
    331                               strcpy(var1->v_commoninfile,var2->v_commoninfile); 
    332    else strcpy(var2->v_commoninfile,var1->v_commoninfile); 
    333  
    334    if ( !strcasecmp(var1->v_precision,"") ) 
    335                                     strcpy(var1->v_precision,var2->v_precision); 
    336    else strcpy(var2->v_precision,var1->v_precision); 
    337  
    338    if ( !strcasecmp(var1->v_initialvalue,"") ) 
    339                               strcpy(var1->v_initialvalue,var2->v_initialvalue); 
    340    else strcpy(var2->v_initialvalue,var1->v_initialvalue); 
    341  
    342    if ( !strcasecmp(var1->v_IntentSpec,"") ) 
    343                                   strcpy(var1->v_IntentSpec,var2->v_IntentSpec); 
    344    else strcpy(var2->v_IntentSpec,var1->v_IntentSpec); 
    345  
    346    if ( !strcasecmp(var1->v_readedlistdimension,"") ) 
    347                 strcpy(var1->v_readedlistdimension,var2->v_readedlistdimension); 
    348    else strcpy(var2->v_readedlistdimension,var1->v_readedlistdimension); 
    349  
    350    if ( var1->v_dimension ) var2->v_dimension = var1->v_dimension ; 
    351    else var1->v_dimension = var2->v_dimension ; 
    352  
    353    if ( var1->v_nbdim == 0 ) var1->v_nbdim = var2->v_nbdim ; 
    354    else var2->v_nbdim = var1->v_nbdim ; 
    355  
    356    if ( var1->v_common == 0 ) var1->v_common = var2->v_common ; 
    357    else var2->v_common = var1->v_common ; 
    358  
    359    if ( var1->v_positioninblock == 0 ) var1->v_positioninblock = 
    360                                                        var2->v_positioninblock ; 
    361    else var2->v_positioninblock = var1->v_positioninblock ; 
    362  
    363    if ( var1->v_module == 0 ) var1->v_module = var2->v_module ; 
    364    else var2->v_module = var1->v_module ; 
    365  
    366    if ( var1->v_save == 0 ) var1->v_save = var2->v_save ; 
    367    else var2->v_save = var1->v_save ; 
    368     
    369    if ( var1->v_VariableIsParameter == 0 ) 
    370                      var1->v_VariableIsParameter = var2->v_VariableIsParameter ; 
    371                      
    372    else var2->v_VariableIsParameter = var1->v_VariableIsParameter ; 
    373    if ( var1->v_indicetabvars == 0 ) 
    374    { 
    375     
    376                                  var1->v_indicetabvars = var2->v_indicetabvars ; 
    377        printf("HERHEHR %s mm %s mm %d\n",var1->v_nomvar,var2->v_modulename,var2->v_indicetabvars); 
    378                                  } 
    379    else var2->v_indicetabvars = var1->v_indicetabvars ; 
    380  
    381    if ( var1->v_ExternalDeclare == 0 ) 
    382                              var1->v_ExternalDeclare = var2->v_ExternalDeclare ; 
    383    else var2->v_ExternalDeclare = var1->v_ExternalDeclare ; 
    384  
    385    if ( var1->v_pointedvar == 0 ) var1->v_pointedvar = var2->v_pointedvar ; 
    386    else var2->v_pointedvar = var1->v_pointedvar ; 
    387  
    388    if ( var1->v_dimensiongiven == 0 ) 
    389                                 var1->v_dimensiongiven = var2->v_dimensiongiven; 
    390    else var2->v_dimensiongiven = var1->v_dimensiongiven ; 
    391  
    392    if ( var1->v_c_star == 0 ) var1->v_c_star = var2->v_c_star; 
    393    else var2->v_c_star = var1->v_c_star ; 
    394  
    395    if ( var1->v_pointerdeclare == 0 ) 
    396                                var1->v_pointerdeclare = var2->v_pointerdeclare ; 
    397    else var2->v_pointerdeclare = var1->v_pointerdeclare ; 
    398  
    399  
    400    if ( var1->v_notgrid == 0 ) var1->v_notgrid = var2->v_notgrid ; 
    401    else var2->v_notgrid = var1->v_notgrid; 
    402  
    403    if ( var1->v_optionaldeclare == 0 ) 
    404                               var1->v_optionaldeclare = var2->v_optionaldeclare; 
    405    else var2->v_optionaldeclare = var1->v_optionaldeclare ; 
    406  
    407    if ( var1->v_allocatable == 0 ) var1->v_allocatable = var2->v_allocatable ; 
    408    else var2->v_allocatable = var1->v_allocatable ; 
    409     
    410    if ( var1->v_target == 0 ) var1->v_target = var2->v_target ; 
    411    else var2->v_target = var1->v_target ; 
    412  
    413    if ( var1->v_dimsempty == 0 ) var1->v_dimsempty = var2->v_dimsempty ; 
    414    else var2->v_dimsempty = var1->v_dimsempty ; 
     271void Merge_Variables(variable *var1, variable *var2) 
     272{ 
     273    if ( !strcasecmp(var1->v_typevar,"") ) 
     274            strcpy(var1->v_typevar,var2->v_typevar); 
     275    else 
     276      { 
     277      strcpy(var2->v_typevar,var1->v_typevar); 
     278      } 
     279 
     280    if ( !strcasecmp(var1->v_oldname,"") ) 
     281            strcpy(var1->v_oldname,var2->v_oldname); 
     282    else    strcpy(var2->v_oldname,var1->v_oldname); 
     283 
     284    if ( !strcasecmp(var1->v_dimchar,"") ) 
     285            strcpy(var1->v_dimchar,var2->v_dimchar); 
     286    else    strcpy(var2->v_dimchar,var1->v_dimchar); 
     287 
     288    if ( !strcasecmp(var1->v_commonname,"") ) 
     289            strcpy(var1->v_commonname,var2->v_commonname); 
     290    else    strcpy(var2->v_commonname,var1->v_commonname); 
     291 
     292    if ( !strcasecmp(var1->v_modulename,"") || (var1->v_module ==0)) 
     293            strcpy(var1->v_modulename,var2->v_modulename); 
     294    else    strcpy(var2->v_modulename,var1->v_modulename); 
     295 
     296    if ( !strcasecmp(var1->v_vallengspec,"") ) 
     297            strcpy(var1->v_vallengspec,var2->v_vallengspec); 
     298    else    strcpy(var2->v_vallengspec,var1->v_vallengspec); 
     299 
     300    if ( !strcasecmp(var1->v_nameinttypename,"") ) 
     301            strcpy(var1->v_nameinttypename,var2->v_nameinttypename); 
     302    else    strcpy(var2->v_nameinttypename,var1->v_nameinttypename); 
     303 
     304    if ( !strcasecmp(var1->v_commoninfile,"") ) 
     305            strcpy(var1->v_commoninfile,var2->v_commoninfile); 
     306    else    strcpy(var2->v_commoninfile,var1->v_commoninfile); 
     307 
     308    if ( !strcasecmp(var1->v_precision,"") ) 
     309            strcpy(var1->v_precision,var2->v_precision); 
     310    else    strcpy(var2->v_precision,var1->v_precision); 
     311 
     312    if ( !strcasecmp(var1->v_initialvalue,"") ) 
     313            strcpy(var1->v_initialvalue,var2->v_initialvalue); 
     314    else    strcpy(var2->v_initialvalue,var1->v_initialvalue); 
     315 
     316    if ( !strcasecmp(var1->v_IntentSpec,"") ) 
     317            strcpy(var1->v_IntentSpec,var2->v_IntentSpec); 
     318    else    strcpy(var2->v_IntentSpec,var1->v_IntentSpec); 
     319 
     320    if ( !strcasecmp(var1->v_readedlistdimension,"") ) 
     321            strcpy(var1->v_readedlistdimension,var2->v_readedlistdimension); 
     322    else    strcpy(var2->v_readedlistdimension,var1->v_readedlistdimension); 
     323 
     324    if ( var1->v_dimension ) 
     325            var2->v_dimension = var1->v_dimension ; 
     326    else    var1->v_dimension = var2->v_dimension ; 
     327 
     328    if ( var1->v_nbdim == 0 ) 
     329            var1->v_nbdim = var2->v_nbdim ; 
     330    else    var2->v_nbdim = var1->v_nbdim ; 
     331 
     332    if ( var1->v_common == 0 ) 
     333            var1->v_common = var2->v_common ; 
     334    else    var2->v_common = var1->v_common ; 
     335 
     336    if ( var1->v_positioninblock == 0 ) 
     337            var1->v_positioninblock = var2->v_positioninblock ; 
     338    else    var2->v_positioninblock = var1->v_positioninblock ; 
     339 
     340    if ( var1->v_module == 0 ) 
     341            var1->v_module = var2->v_module ; 
     342    else    var2->v_module = var1->v_module ; 
     343 
     344    if ( var1->v_save == 0 ) 
     345            var1->v_save = var2->v_save ; 
     346    else    var2->v_save = var1->v_save ; 
     347 
     348    if ( var1->v_VariableIsParameter == 0 ) 
     349            var1->v_VariableIsParameter = var2->v_VariableIsParameter ; 
     350    else    var2->v_VariableIsParameter = var1->v_VariableIsParameter ; 
     351 
     352    if ( var1->v_indicetabvars == 0 ) 
     353            var1->v_indicetabvars = var2->v_indicetabvars ; 
     354    else    var2->v_indicetabvars = var1->v_indicetabvars ; 
     355 
     356    if ( var1->v_ExternalDeclare == 0 ) 
     357            var1->v_ExternalDeclare = var2->v_ExternalDeclare ; 
     358    else    var2->v_ExternalDeclare = var1->v_ExternalDeclare ; 
     359 
     360    if ( var1->v_pointedvar == 0 ) 
     361            var1->v_pointedvar = var2->v_pointedvar ; 
     362    else    var2->v_pointedvar = var1->v_pointedvar ; 
     363 
     364    if ( var1->v_dimensiongiven == 0 ) 
     365            var1->v_dimensiongiven = var2->v_dimensiongiven; 
     366    else    var2->v_dimensiongiven = var1->v_dimensiongiven ; 
     367 
     368    if ( var1->v_c_star == 0 ) 
     369            var1->v_c_star = var2->v_c_star; 
     370    else    var2->v_c_star = var1->v_c_star ; 
     371 
     372    if ( var1->v_catvar == 0 ) 
     373            var1->v_catvar = var2->v_catvar; 
     374    else    var2->v_catvar = var1->v_catvar ; 
     375 
     376    if ( var1->v_pointerdeclare == 0 ) 
     377            var1->v_pointerdeclare = var2->v_pointerdeclare ; 
     378    else    var2->v_pointerdeclare = var1->v_pointerdeclare ; 
     379 
     380    if ( var1->v_notgrid == 0 ) 
     381            var1->v_notgrid = var2->v_notgrid ; 
     382    else    var2->v_notgrid = var1->v_notgrid; 
     383 
     384    if ( var1->v_optionaldeclare == 0 ) 
     385            var1->v_optionaldeclare = var2->v_optionaldeclare; 
     386    else    var2->v_optionaldeclare = var1->v_optionaldeclare ; 
     387 
     388    if ( var1->v_allocatable == 0 ) 
     389            var1->v_allocatable = var2->v_allocatable ; 
     390    else    var2->v_allocatable = var1->v_allocatable ; 
     391 
     392    if ( var1->v_target == 0 ) 
     393            var1->v_target = var2->v_target ; 
     394    else    var2->v_target = var1->v_target ; 
     395 
     396    if ( var1->v_dimsempty == 0 ) 
     397            var1->v_dimsempty = var2->v_dimsempty ; 
     398    else    var2->v_dimsempty = var1->v_dimsempty ; 
    415399} 
    416400 
     
    437421      while ( parcours1 && out == 0 ) 
    438422      { 
    439          if ( !strcasecmp(parcours->var->v_nomvar, 
    440                           parcours1->var->v_nomvar)         && 
    441               !strcasecmp(parcours->var->v_subroutinename, 
    442                           parcours1->var->v_subroutinename) && 
    443               !strcasecmp(parcours->var->v_modulename, 
    444                           parcours1->var->v_modulename) 
     423         if ( !strcasecmp(parcours->var->v_nomvar,         parcours1->var->v_nomvar)         && 
     424              !strcasecmp(parcours->var->v_subroutinename, parcours1->var->v_subroutinename) && 
     425              !strcasecmp(parcours->var->v_modulename,     parcours1->var->v_modulename) 
    445426            ) out = 1; 
    446427         else parcours1 = parcours1->suiv; 
     
    448429      /* if variable has been found                                           */ 
    449430 
    450       if ( out == 1 ) CopyRecord(parcours->var,parcours1->var); 
    451        
     431      if ( out == 1 ) Merge_Variables(parcours->var,parcours1->var); 
     432 
    452433      /* looking in List_Dimension_Var                                        */ 
    453434      if (out == 0 ) 
     
    471452        } 
    472453        /* if variable has been found                                         */ 
    473          
     454 
    474455        if ( out == 1 ) 
    475456        { 
    476            CopyRecord(parcours->var,parcours1->var); 
     457           Merge_Variables(parcours->var,parcours1->var); 
    477458           /* we should remove this record from the List_Dimension_Var        */ 
    478459           if ( parcours1 == List_Dimension_Var ) 
     
    495476   listvar *parcours; 
    496477   listvar *newvar; 
    497    char ligne[LONG_C]; 
     478   char tmpname[LONG_VNAME]; 
    498479 
    499480   parcours = List_Save_Var; 
     
    503484      /* Save in subroutine which is not defined in a module                  */ 
    504485      { 
    505          newvar = (listvar *)malloc(sizeof(listvar)); 
    506          newvar->var = (variable *)malloc(sizeof(variable)); 
     486         newvar = (listvar *)calloc(1,sizeof(listvar)); 
     487         newvar->var = (variable *)calloc(1,sizeof(variable)); 
    507488         /*                                                                   */ 
    508489         Init_Variable(newvar->var); 
    509490         /*                                                                   */ 
    510491         newvar->suiv = NULL; 
    511          CopyRecord(parcours->var,newvar->var); 
     492         Merge_Variables(parcours->var,newvar->var); 
    512493         strcpy(newvar->var->v_subroutinename,parcours->var->v_subroutinename); 
    513494         strcpy(newvar->var->v_nomvar,parcours->var->v_nomvar); 
    514  
    515          sprintf(ligne,"save_%s",parcours->var->v_subroutinename); 
    516          Add_NameOfCommon_1(ligne,parcours->var->v_subroutinename); 
    517          strcpy(newvar->var->v_commonname,ligne); 
    518          Save_Length(ligne,7); 
     495         newvar->var->v_catvar=parcours->var->v_catvar; 
     496         sprintf(tmpname,"save_%s",parcours->var->v_subroutinename); 
     497         Add_NameOfCommon_1(tmpname,parcours->var->v_subroutinename); 
     498         strcpy(newvar->var->v_commonname,tmpname); 
    519499         List_Common_Var = AddListvarToListvar(newvar,List_Common_Var,1); 
    520500      } 
     
    522502      /* Save in subroutine which is defined in a module                      */ 
    523503      { 
    524          newvar = (listvar *)malloc(sizeof(listvar)); 
    525          newvar->var = (variable *)malloc(sizeof(variable)); 
     504         newvar = (listvar *)calloc(1,sizeof(listvar)); 
     505         newvar->var = (variable *)calloc(1,sizeof(variable)); 
    526506         /*                                                                   */ 
    527507         Init_Variable(newvar->var); 
     
    529509         newvar->suiv = NULL; 
    530510 
    531          CopyRecord(parcours->var,newvar->var); 
     511         Merge_Variables(parcours->var,newvar->var); 
    532512         strcpy(newvar->var->v_subroutinename,parcours->var->v_subroutinename); 
    533513 
    534514         strcpy(newvar->var->v_nomvar,parcours->var->v_nomvar); 
    535515 
     516         newvar->var->v_catvar=parcours->var->v_catvar; 
    536517         strcpy(newvar->var->v_modulename,parcours->var->v_modulename); 
    537518         List_Global_Var = AddListvarToListvar(newvar,List_Global_Var,1); 
     
    560541      { 
    561542 
    562          if ( !strcasecmp(parcours->var->v_nomvar, 
    563                           parcours1->var->v_nomvar)         && 
    564               !strcasecmp(parcours->var->v_subroutinename, 
    565                           parcours1->var->v_subroutinename) 
    566             ) { 
    567             out = 1;      
    568             } 
     543         if ( !strcasecmp(parcours->var->v_nomvar,         parcours1->var->v_nomvar) && 
     544              !strcasecmp(parcours->var->v_subroutinename, parcours1->var->v_subroutinename) ) 
     545         { 
     546            out = 1; 
     547         } 
    569548         else parcours1 = parcours1->suiv; 
    570549      } 
     
    573552      { 
    574553         strcpy(parcours->var->v_commoninfile,parcours1->var->v_commoninfile); 
    575               
    576          CopyRecord(parcours->var,parcours1->var); 
     554 
     555         Merge_Variables(parcours->var,parcours1->var); 
    577556      } 
    578557      parcours = parcours->suiv; 
     
    587566void Update_List_Var(listvar *list_to_modify) 
    588567{ 
    589    listvar *parcours; 
    590    listvar *parcours1; 
    591    int out; 
    592    int out2; 
    593     
    594    parcours = list_to_modify; 
    595  
    596    while( parcours ) 
    597    { 
    598      printf("LE NOM EST %s\n",parcours->var->v_nomvar); 
    599       /* looking in List_Global_Var                                           */ 
    600        
    601       out = 0; 
    602        
    603 //       if (list_to_modify != List_SubroutineDeclaration_Var && list_to_modify != List_UsedInSubroutine_Var) { 
    604 //       parcours1 = List_Global_Var; 
    605 //       while ( parcours1 && out == 0 ) 
    606 //       { 
    607 //          if ( !strcasecmp(parcours->var->v_nomvar, 
    608 //                           parcours1->var->v_nomvar)         && 
    609 //               !strcasecmp(parcours->var->v_modulename, 
    610 //                           parcours1->var->v_modulename) 
    611 //             ) out = 1; 
    612 //          else parcours1 = parcours1->suiv; 
    613 //       } 
    614 //       } 
    615        
    616   //    if (list_to_modify == List_UsedInSubroutine_Var) { 
    617       parcours1 = List_Global_Var; 
    618       while ( parcours1 && out == 0 ) 
    619       { 
    620       printf("lenombis est %s\n",parcours1->var->v_nomvar); 
    621          if ( !strcasecmp(parcours->var->v_nomvar, 
    622                           parcours1->var->v_nomvar)         && 
    623                  !strcasecmp(parcours->var->v_subroutinename, 
    624                              parcours1->var->v_subroutinename) && 
    625               !strcasecmp(parcours->var->v_modulename, 
    626                           parcours1->var->v_modulename) 
    627             ) { 
    628             out = 1; 
     568    listvar *parcours; 
     569    listvar *parcours1; 
     570    int out; 
     571 
     572    parcours = list_to_modify; 
     573 
     574    while( parcours ) 
     575    { 
     576        /*printf("LE NOM EST %s\n",parcours->var->v_nomvar);*/ 
     577        /* looking in List_Global_Var                                           */ 
     578        out = 0; 
     579        parcours1 = List_Global_Var; 
     580 
     581        while ( parcours1 && out == 0 ) 
     582        { 
     583            if ( !strcasecmp(parcours->var->v_nomvar, parcours1->var->v_nomvar)         && 
     584                 !strcasecmp(parcours->var->v_subroutinename, parcours1->var->v_subroutinename) && 
     585                 !strcasecmp(parcours->var->v_modulename, parcours1->var->v_modulename) ) 
     586            { 
     587                out = 1; 
    629588            } 
    630          else parcours1 = parcours1->suiv; 
    631       } 
    632 //      }       
    633  
    634       /* if variable has been found                                           */ 
    635       if ( out == 1 ) { 
    636       CopyRecord(parcours->var,parcours1->var); 
    637       } 
    638       /* looking in List_SubroutineDeclaration_Var                            */ 
    639       else 
    640       { 
    641          parcours1 = List_SubroutineDeclaration_Var ; 
    642          out = 0; 
    643          while ( parcours1) 
    644          { 
    645             if ( !strcasecmp(parcours->var->v_nomvar, 
    646                              parcours1->var->v_nomvar)         && 
    647                  !strcasecmp(parcours->var->v_subroutinename, 
    648                              parcours1->var->v_subroutinename) && 
    649                  !strcasecmp(parcours->var->v_modulename, 
    650                              parcours1->var->v_modulename) 
    651                ) { 
    652  
    653                out = 1; 
    654                break; 
    655                } 
    656589            else parcours1 = parcours1->suiv; 
    657          } 
    658               
    659          /* if variable has been found                                        */ 
    660          if ( out == 1 ) { 
    661          CopyRecord(parcours->var,parcours1->var); 
    662          
    663          } 
    664          else 
    665          { 
    666             parcours1 = List_Common_Var ; 
     590        } 
     591 
     592        /* if variable has been found                                           */ 
     593        if ( out == 1 ) 
     594        { 
     595            Merge_Variables(parcours->var,parcours1->var); 
     596        } 
     597        /* looking in List_SubroutineDeclaration_Var                            */ 
     598        else 
     599        { 
     600            parcours1 = List_SubroutineDeclaration_Var ; 
    667601            out = 0; 
    668             while ( parcours1 && out == 0 ) 
     602            while ( parcours1 ) 
    669603            { 
    670                if ( !strcasecmp(parcours->var->v_nomvar, 
    671                                 parcours1->var->v_nomvar)        && 
    672                     !strcasecmp(parcours->var->v_subroutinename, 
    673                                 parcours1->var->v_subroutinename) && 
    674                     !strcasecmp(parcours->var->v_modulename, 
    675                                 parcours1->var->v_modulename) 
    676                   ) out = 1; 
    677                else parcours1 = parcours1->suiv; 
     604                if ( !strcasecmp(parcours->var->v_nomvar, parcours1->var->v_nomvar)                 && 
     605                     !strcasecmp(parcours->var->v_subroutinename, parcours1->var->v_subroutinename) && 
     606                     !strcasecmp(parcours->var->v_modulename, parcours1->var->v_modulename) ) 
     607                { 
     608                    out = 1; 
     609                    break; 
     610                } 
     611                else parcours1 = parcours1->suiv; 
    678612            } 
    679             /* if variable has been found                                     */ 
    680             if ( out == 1 ) { 
    681             CopyRecord(parcours->var,parcours1->var);        
    682          } 
    683       } 
    684       } 
    685       parcours = parcours->suiv; 
    686    } 
    687     
     613            /* if variable has been found                                        */ 
     614            if ( out == 1 ) 
     615            { 
     616                Merge_Variables(parcours->var,parcours1->var); 
     617            } 
     618            else 
     619            { 
     620                parcours1 = List_Common_Var ; 
     621                out = 0; 
     622                while ( parcours1 && out == 0 ) 
     623                { 
     624                    if ( !strcasecmp(parcours->var->v_nomvar, parcours1->var->v_nomvar)                 && 
     625                         !strcasecmp(parcours->var->v_subroutinename, parcours1->var->v_subroutinename) && 
     626                         !strcasecmp(parcours->var->v_modulename, parcours1->var->v_modulename) ) 
     627                    { 
     628                        out = 1; 
     629                    } 
     630                    else parcours1 = parcours1->suiv; 
     631                } 
     632                /* if variable has been found                                     */ 
     633                if ( out == 1 ) 
     634                { 
     635                    Merge_Variables(parcours->var,parcours1->var); 
     636                } 
     637            } 
     638        } 
     639        parcours = parcours->suiv; 
     640    } 
    688641} 
    689642 
     
    696649   int out; 
    697650 
    698     
     651 
    699652   parcours = List_UsedInSubroutine_Var; 
    700653   while( parcours ) 
    701654   { 
    702655      out = 0 ; 
    703       printf("OIEROZEIR %s %s\n",parcours->var->v_nomvar,parcours->var->v_modulename); 
    704656      if ( parcours->var->v_indicetabvars == 0 ) 
    705657      { 
    706        printf("OIEROZEIR %s\n",parcours->var->v_nomvar); 
    707658         parcours2 = List_NameOfModuleUsed; 
    708659         while( parcours2 ) 
    709660         { 
    710             if ( !strcasecmp(parcours2->u_cursubroutine,"") && 
    711                  !strcasecmp(parcours2->u_modulename, 
    712                              parcours->var->v_modulename) 
    713                ) 
     661            if ( !strcasecmp(parcours2->u_cursubroutine, "") && 
     662                 !strcasecmp(parcours2->u_modulename, parcours->var->v_modulename) ) 
    714663            { 
    715664               parcours3 = List_Global_Var; 
     
    722671                  else parcours3 = parcours3->suiv; 
    723672               } 
    724                if ( out == 1 ) CopyRecord(parcours->var,parcours3->var); 
     673               if ( out == 1 ) Merge_Variables(parcours->var,parcours3->var); 
    725674            } 
    726             else if ( !strcasecmp(parcours2->u_cursubroutine, 
    727                              parcours->var->v_subroutinename) && 
    728                  !strcasecmp(parcours2->u_modulename, 
    729                              parcours->var->v_modulename) 
    730                ) 
     675            else if ( !strcasecmp(parcours2->u_cursubroutine, parcours->var->v_subroutinename) && 
     676                      !strcasecmp(parcours2->u_modulename,    parcours->var->v_modulename) ) 
    731677            { 
    732678               parcours3 = List_Global_Var; 
     
    739685                  else parcours3 = parcours3->suiv; 
    740686               } 
    741                if ( out == 1 ) CopyRecord(parcours->var,parcours3->var); 
     687               if ( out == 1 ) Merge_Variables(parcours->var,parcours3->var); 
    742688            } 
    743689            parcours2 = parcours2->suiv; 
     
    755701               else parcours3 = parcours3->suiv; 
    756702            } 
    757             if ( out == 1 ) CopyRecord(parcours->var,parcours3->var); 
     703            if ( out == 1 ) Merge_Variables(parcours->var,parcours3->var); 
    758704         } 
    759705         /*                                                                   */ 
     
    792738      if ( out == 1 ) 
    793739      { 
    794          CopyRecord(parcours->var,parcours1->var); 
     740         Merge_Variables(parcours->var,parcours1->var); 
    795741         strcpy(parcours->var->v_subroutinename, 
    796742                parcours1->var->v_subroutinename); 
     
    841787} 
    842788 
    843 int LookingForVariableInListName(listvar *listin,char *name) 
     789int LookingForVariableInListName(listvar *listin,const char *name) 
    844790{ 
    845791   listvar *parcours1; 
     
    860806} 
    861807 
     808variable *get_variable_in_list_from_name( listvar *listin, const char *name ) 
     809{ 
     810    listvar *parcours = listin; 
     811    variable *var = NULL; 
     812 
     813    while ( parcours && (!var) ) 
     814    { 
     815        if ( !strcasecmp(name,parcours->var->v_nomvar) && 
     816           ( !strcasecmp(subroutinename,parcours->var->v_subroutinename) || 
     817             !strcasecmp(subroutinename,"") ) ) 
     818        { 
     819            var = parcours->var; 
     820        } 
     821        else parcours = parcours -> suiv; 
     822   } 
     823   return var; 
     824} 
     825 
    862826int LookingForVariableInListGlob(listvar *listin,variable *var) 
    863827{ 
     
    897861void UpdateListDeclarationWithDimensionList() 
    898862{ 
    899    List_SubroutineDeclaration_Var = AddListvarToListvar(List_Dimension_Var, 
    900                                               List_SubroutineDeclaration_Var,1); 
     863   List_SubroutineDeclaration_Var = AddListvarToListvar(List_Dimension_Var, List_SubroutineDeclaration_Var,1); 
    901864} 
    902865 
     
    915878   listvar *parcoursprec; 
    916879   int remove; 
    917      
    918          
     880 
    919881   parcoursprec = (listvar *)NULL; 
    920882   parcours = List_UsedInSubroutine_Var; 
    921883   while ( parcours ) 
    922884   { 
    923       /*                                                                      */ 
    924       remove = LookingForVariableInListGlobal(List_SubroutineArgument_Var, 
    925                                                                  parcours->var); 
     885      remove = LookingForVariableInListGlobal(List_SubroutineArgument_Var,   parcours->var); 
    926886      if ( remove == 0 ) 
    927            remove = LookingForVariableInList(List_SubroutineDeclaration_Var, 
    928                                                                  parcours->var); 
    929  
     887           remove = LookingForVariableInList(List_SubroutineDeclaration_Var, parcours->var); 
    930888      if ( remove == 0 ) 
    931            remove = LookingForVariableInList(List_Parameter_Var, 
    932                                                                  parcours->var); 
     889           remove = LookingForVariableInList(List_Parameter_Var, parcours->var); 
    933890      if ( remove == 0 ) 
    934            remove = LookingForVariableInList(List_FunctionType_Var, 
    935                                                                  parcours->var); 
     891           remove = LookingForVariableInList(List_FunctionType_Var, parcours->var); 
    936892      if ( remove == 0 ) 
    937            remove = LookingForVariableInListGlob(List_GlobalParameter_Var, 
    938                                                                  parcours->var); 
    939        
     893           remove = LookingForVariableInListGlob(List_GlobalParameter_Var, parcours->var); 
    940894      if ( remove == 0 ) 
    941            remove = LookingForVariableInListParamGlob( 
    942                                     List_GlobParamModuleUsed_Var,parcours->var); 
    943  
    944    
     895           remove = LookingForVariableInListParamGlob(List_GlobParamModuleUsed_Var, parcours->var); 
    945896      if ( remove == 0 ) 
    946897      { 
     
    976927      } 
    977928   } 
    978     
    979  
    980929} 
    981930 
     
    1023972      } 
    1024973   } 
    1025  
    1026974} 
    1027975 
     
    1032980   listvar *parcoursprec; 
    1033981   int out ; 
    1034             
     982 
    1035983   parcoursprec = (listvar *)NULL; 
    1036984   parcours = List_SubroutineDeclaration_Var; 
     
    1041989      while ( parcours1 && out == 0 ) 
    1042990      { 
    1043          if ( !strcasecmp(parcours->var->v_subroutinename, 
    1044                           parcours1->var->v_subroutinename) && 
    1045               !strcasecmp(parcours->var->v_nomvar, 
    1046                           parcours1->var->v_nomvar) 
     991         if ( !strcasecmp(parcours->var->v_subroutinename,parcours1->var->v_subroutinename) && 
     992              !strcasecmp(parcours->var->v_nomvar,parcours1->var->v_nomvar) 
    1047993            ) out = 1; 
    1048994         else parcours1 = parcours1->suiv; 
     
    10541000         while ( parcours1 && out == 0 ) 
    10551001         { 
    1056             if ( !strcasecmp(parcours->var->v_subroutinename, 
    1057                              parcours1->var->v_subroutinename) && 
    1058                  !strcasecmp(parcours->var->v_nomvar, 
    1059                              parcours1->var->v_nomvar) 
     1002            if ( !strcasecmp(parcours->var->v_subroutinename,parcours1->var->v_subroutinename) && 
     1003                 !strcasecmp(parcours->var->v_nomvar,parcours1->var->v_nomvar) 
    10601004               ) out = 1; 
    10611005            else parcours1 = parcours1->suiv; 
     
    10831027      } 
    10841028   } 
    1085         
    10861029} 
    10871030 
     
    11331076                         parcours2->var->v_modulename) ) 
    11341077         { 
    1135             CopyRecord(parcours->var,parcours2->var); 
     1078            Merge_Variables(parcours->var,parcours2->var); 
    11361079            /* remove var from the parcours2                                  */ 
    11371080            parcours2prec ->suiv = parcours2->suiv; 
     
    11601103   Clean_List_UsedInSubroutine_Var(); 
    11611104   Clean_List_SubroutineDeclaration_Var(); 
    1162     
     1105 
    11631106   newvar = (listvar *)NULL; 
    11641107/*   newvar = List_Common_Var;*/ 
     
    11841127void ListUpdate() 
    11851128{ 
    1186    listvar *newvar; 
    1187          
    1188    Update_List_Subroutine_Var(List_SubroutineArgument_Var); 
    1189  
    1190  
    1191         
    1192    Update_List_Subroutine_Var(List_FunctionType_Var); 
    1193    Update_List_Var(List_Parameter_Var); 
    1194    Update_List_Var(List_Dimension_Var); 
    1195    Update_List_Var(List_Data_Var); 
    1196    Update_List_Var(List_Save_Var); 
    1197    Update_List_Var(List_GlobalParameter_Var); 
    1198    Update_List_Var(List_Common_Var); 
    1199    Update_List_Var(List_SubroutineDeclaration_Var); 
    1200    Update_List_Var(List_UsedInSubroutine_Var); 
    1201    Update_List_From_Common_Var(List_UsedInSubroutine_Var); 
    1202    Update_List_From_Common_Var(List_SubroutineDeclaration_Var); 
    1203    Update_NotGridDepend_Var(List_NotGridDepend_Var); 
    1204      
    1205    newvar =(listvar * )NULL; 
    1206 /*   newvar = List_Common_Var;*/ 
    1207 /*   newvar = List_UsedInSubroutine_Var;*/ 
    1208 /*   newvar = List_Data_Var;*/ 
    1209    while ( newvar ) 
    1210    { 
    1211       printf("++++ %s - %d - %s - %s - %s - %s\n", 
    1212       newvar->var->v_nomvar, 
    1213       newvar->var->v_VariableIsParameter, 
    1214       newvar->var->v_subroutinename, 
    1215       newvar->var->v_modulename, 
    1216       newvar->var->v_typevar, 
    1217       newvar->var->v_initialvalue       
    1218             ); 
    1219       newvar = newvar->suiv; 
    1220    } 
     1129    listvar *newvar; 
     1130 
     1131    Update_List_Subroutine_Var(List_SubroutineArgument_Var); 
     1132    Update_List_Subroutine_Var(List_FunctionType_Var); 
     1133    Update_List_Var(List_Parameter_Var); 
     1134    Update_List_Var(List_Dimension_Var); 
     1135    Update_List_Var(List_Data_Var); 
     1136    Update_List_Var(List_Save_Var); 
     1137    Update_List_Var(List_GlobalParameter_Var); 
     1138    Update_List_Var(List_Common_Var); 
     1139    Update_List_Var(List_SubroutineDeclaration_Var); 
     1140    Update_List_Var(List_UsedInSubroutine_Var); 
     1141    Update_List_From_Common_Var(List_UsedInSubroutine_Var); 
     1142    Update_List_From_Common_Var(List_SubroutineDeclaration_Var); 
     1143    Update_NotGridDepend_Var(List_NotGridDepend_Var); 
     1144 
     1145    newvar = (listvar * ) NULL; 
     1146//   newvar = List_Common_Var; 
     1147//   newvar = List_UsedInSubroutine_Var; 
     1148//   newvar = List_Data_Var; 
     1149    while ( newvar ) 
     1150    { 
     1151        printf("++++ %s - %s - %s - %d - %s - %s\n", 
     1152                newvar->var->v_modulename, 
     1153                newvar->var->v_subroutinename, 
     1154                newvar->var->v_nomvar, 
     1155                newvar->var->v_VariableIsParameter, 
     1156                newvar->var->v_typevar, 
     1157                newvar->var->v_initialvalue ); 
     1158        newvar = newvar->suiv; 
     1159    } 
    12211160} 
    12221161 
     
    12731212      parcours = parcours -> suiv ; 
    12741213   } 
    1275         
     1214 
    12761215} 
    12771216 
     
    12841223   int position; 
    12851224   int out; 
    1286    char name_sub[LONG_C]; 
     1225   char name_sub[LONG_M]; 
    12871226 
    12881227   parcours = List_SubroutineArgument_Var; 
     
    13431282      parcours = parcours->suiv; 
    13441283   } 
    1345         
     1284 
    13461285} 
    13471286 
     
    13641303   parcoursprec = (listvar *)NULL; 
    13651304 
    1366    if ( mark == 1 ) printf("MODULE Treated %s \n",nom); 
     1305   if ( todebug == 1 ) printf("MODULE Treated %s \n",nom); 
    13671306 
    13681307   List_ModuleUsed_Var = (listvar *)NULL; 
     
    13891328         if ( out == 1 ) 
    13901329         { 
    1391             CopyRecord(parcours->var,parcours1->var); 
     1330            Merge_Variables(parcours->var,parcours1->var); 
    13921331            /* Remove this variable from the List_ModuleUsed_Var              */ 
    13931332            if ( parcours1 == List_ModuleUsed_Var ) 
     
    14051344         /* if we do not found the var Module name in the old list            */ 
    14061345         { 
    1407             if ( Listofavailableindices ) 
    1408             { 
    1409                parcours->var->v_indicetabvars = Listofavailableindices -> 
    1410                                                                        i_indice; 
    1411                if ( Listofavailableindices->suiv ) 
    1412                           Listofavailableindices = Listofavailableindices->suiv; 
    1413                else 
    1414                           Listofavailableindices = (listindice *)NULL; 
    1415             } 
    1416             else 
    1417             { 
    1418                indicemaxtabvars = indicemaxtabvars + 1 ; 
    1419                parcours->var->v_indicetabvars = indicemaxtabvars; 
    1420             } 
     1346  //       update_indicemaxtabvars(parcours->var,Listofavailableindices); 
     1347         update_indicemaxtabvars(parcours->var,Listofavailableindices_glob); 
     1348  //          if ( Listofavailableindices ) 
     1349  //          { 
     1350  //             parcours->var->v_indicetabvars = Listofavailableindices -> 
     1351  //                                                                     i_indice; 
     1352  //             if ( Listofavailableindices->suiv ) 
     1353  //                        Listofavailableindices = Listofavailableindices->suiv; 
     1354  //             else 
     1355  //                        Listofavailableindices = (listindice *)NULL; 
     1356  //          } 
     1357  //          else 
     1358  //          { 
     1359  //             indicemaxtabvars = indicemaxtabvars + 1 ; 
     1360  //             parcours->var->v_indicetabvars = indicemaxtabvars; 
     1361  //          } 
    14211362         } 
    14221363      } 
     
    14281369  while ( parcours1 ) 
    14291370  { 
    1430      newindice=(listindice *) malloc (sizeof (listindice)); 
     1371     newindice=(listindice *) calloc(1,sizeof(listindice)); 
    14311372     newindice -> i_indice = parcours1 -> var -> v_indicetabvars; 
    1432      newindice -> suiv = Listofavailableindices; 
    1433      Listofavailableindices = newindice; 
     1373     newindice -> suiv = Listofavailableindices_glob[parcours1 -> var -> v_catvar]; 
     1374     Listofavailableindices_glob[parcours1 -> var -> v_catvar] = newindice; 
    14341375     parcours1 = parcours1->suiv; 
    14351376  } 
     
    14441385   listvar *parcours; 
    14451386 
    1446    if ( mark == 1 ) printf("MODULE No Treated %s \n",nom); 
     1387   if ( todebug == 1 ) printf("MODULE No Treated %s \n",nom); 
    14471388 
    14481389   parcours = List_Global_Var; 
     
    14541395          ) 
    14551396      { 
    1456          indicemaxtabvars = indicemaxtabvars + 1 ; 
    1457          parcours->var->v_indicetabvars = indicemaxtabvars; 
     1397         indicemaxtabvars[parcours->var->v_catvar] = indicemaxtabvars[parcours->var->v_catvar] + 1 ; 
     1398         parcours->var->v_indicetabvars = indicemaxtabvars[parcours->var->v_catvar]; 
    14581399      } 
    14591400      parcours = parcours->suiv; 
     
    14741415      { 
    14751416         strcpy(parcours->var->v_commoninfile,record->var->v_commoninfile); 
    1476          CopyRecord(parcours->var,record->var); 
     1417         Merge_Variables(parcours->var,record->var); 
    14771418      } 
    14781419      parcours = parcours -> suiv; 
     
    14901431{ 
    14911432   listvar *parcours; 
    1492    listvar *parcoursprec; 
    14931433   listvar *parcours1; 
    14941434   listvar *List_CommonUsed_Var; 
     
    14961436   int out; 
    14971437 
    1498    parcoursprec = (listvar *)NULL; 
    1499  
    1500    if ( mark == 1 ) printf("COMMON Treated %s \n",nom); 
     1438   if ( todebug == 1 ) printf("COMMON Treated %s \n",nom); 
    15011439 
    15021440   List_CommonUsed_Var = (listvar *)NULL; 
     
    15181456            else 
    15191457            { 
    1520                parcoursprec = parcours1 ; 
    15211458               parcours1 = parcours1->suiv; 
    15221459            } 
     
    15271464            strcpy(parcours->var->v_commoninfile, 
    15281465                   parcours1->var->v_commoninfile); 
    1529             CopyRecord(parcours->var,parcours1->var); 
     1466            Merge_Variables(parcours->var,parcours1->var); 
    15301467         } 
    15311468         else 
    15321469         /* if we do not found the var common name in the old list            */ 
    15331470         { 
    1534             if ( Listofavailableindices ) 
    1535             { 
    1536                parcours->var->v_indicetabvars = Listofavailableindices -> 
    1537                                                                        i_indice; 
    1538                if ( Listofavailableindices->suiv ) 
    1539                           Listofavailableindices = Listofavailableindices->suiv; 
    1540                else 
    1541                           Listofavailableindices = (listindice *)NULL; 
    1542             } 
    1543             else 
    1544             { 
    1545                indicemaxtabvars = indicemaxtabvars + 1 ; 
    1546                parcours->var->v_indicetabvars = indicemaxtabvars; 
    1547             } 
     1471    //     update_indicemaxtabvars(parcours->var,Listofavailableindices); 
     1472         update_indicemaxtabvars(parcours->var,Listofavailableindices_glob); 
     1473    //        if ( Listofavailableindices ) 
     1474    //        { 
     1475    //           parcours->var->v_indicetabvars = Listofavailableindices -> 
     1476    //                                                                   i_indice; 
     1477    //           if ( Listofavailableindices->suiv ) 
     1478    //                      Listofavailableindices = Listofavailableindices->suiv; 
     1479    //           else 
     1480    //                      Listofavailableindices = (listindice *)NULL; 
     1481    //        } 
     1482    //        else 
     1483    //        { 
     1484    //           indicemaxtabvars = indicemaxtabvars + 1 ; 
     1485    //           parcours->var->v_indicetabvars = indicemaxtabvars; 
     1486    //        } 
    15481487         } 
    15491488         /* Look in the remaining list in the variable is define              */ 
     
    15591498     if ( parcours1 -> var -> v_indicetabvars == 0 ) 
    15601499     { 
    1561         newindice=(listindice *) malloc (sizeof (listindice)); 
     1500        newindice=(listindice *) calloc(1,sizeof(listindice)); 
    15621501        newindice -> i_indice = parcours1 -> var -> v_indicetabvars; 
    1563         newindice -> suiv = Listofavailableindices; 
    1564         Listofavailableindices = newindice; 
     1502        newindice -> suiv = Listofavailableindices_glob[parcours1 -> var -> v_catvar]; 
     1503        Listofavailableindices_glob[parcours1 -> var -> v_catvar] = newindice; 
    15651504     } 
    15661505     parcours1 = parcours1->suiv; 
    15671506  } 
    15681507} 
     1508 
     1509void update_indicemaxtabvars(variable *var,listindice **Listofindices) 
     1510{ 
     1511 
     1512 
     1513            if ( Listofindices[var->v_catvar] ) 
     1514            { 
     1515               var->v_indicetabvars = Listofindices[var->v_catvar] -> i_indice; 
     1516               if ( Listofindices[var->v_catvar]->suiv ) 
     1517                          Listofindices[var->v_catvar] = Listofindices[var->v_catvar]->suiv; 
     1518               else 
     1519                          Listofindices[var->v_catvar] = (listindice *)NULL; 
     1520            } 
     1521            else 
     1522            { 
     1523               indicemaxtabvars[var->v_catvar] = indicemaxtabvars[var->v_catvar] + 1 ; 
     1524               var->v_indicetabvars = indicemaxtabvars[var->v_catvar]; 
     1525            } 
     1526 
     1527} 
     1528 
    15691529/******************************************************************************/ 
    15701530/*                     IndiceTabvars_Common_Var_No_Treated                    */ 
     
    15771537   listvar *parcours2; 
    15781538 
    1579    if ( mark == 1 ) printf("COMMON No Treated %s \n",nom); 
     1539   if ( todebug == 1 ) printf("COMMON No Treated %s \n",nom); 
    15801540 
    15811541   parcours = List_Common_Var; 
     
    15871547          ) 
    15881548      { 
    1589          indicemaxtabvars = indicemaxtabvars + 1 ; 
    1590          parcours->var->v_indicetabvars = indicemaxtabvars; 
     1549         indicemaxtabvars[parcours->var->v_catvar] = indicemaxtabvars[parcours->var->v_catvar] + 1 ; 
     1550         parcours->var->v_indicetabvars = indicemaxtabvars[parcours->var->v_catvar]; 
    15911551         parcours2 = parcours; 
    15921552         while ( parcours2 ) 
     
    16191579   while ( parcours_nom ) 
    16201580   { 
    1621       if ( Did_module_common_treaded(parcours_nom->o_nom) == 1 ) 
     1581      if ( is_dependfile_created(parcours_nom->o_nom) == 1 ) 
    16221582      { 
    16231583         IndiceTabvars_Global_Var_Treated(parcours_nom->o_nom); 
     
    16331593   while ( parcours_nom ) 
    16341594   { 
    1635       if ( Did_module_common_treaded(parcours_nom->o_nom) == 1 ) 
     1595      if ( is_dependfile_created(parcours_nom->o_nom) == 1 ) 
    16361596      { 
    16371597         IndiceTabvars_Common_Var_Treated(parcours_nom->o_nom); 
     
    16631623              !strcasecmp(parcours->var->v_subroutinename,"")            && 
    16641624              parcours->var->v_VariableIsParameter == 0                  && 
    1665               (parcours->var->v_allocatable == 0 || !strcasecmp(parcours->var->v_typevar,"type"))      && 
     1625              ( parcours->var->v_allocatable == 0 || !strcasecmp(parcours->var->v_typevar,"type"))      && 
    16661626              parcours->var->v_notgrid == 0                              && 
    1667               ( parcours->var->v_nbdim != 0 || 
    1668                 strcasecmp(parcours->var->v_initialvalue,"") 
    1669               ) ) out = 1; 
     1627              ( ( parcours->var->v_nbdim != 0 || !strcasecmp(parcours->var->v_typevar,"type") ) 
     1628              || strcasecmp(parcours->var->v_initialvalue,"") ) 
     1629            ) 
     1630         { 
     1631            out = 1; 
     1632         } 
    16701633         else parcours = parcours -> suiv; 
    16711634      } 
    1672       if ( out == 1 ) 
     1635      if ( out ) 
    16731636      { 
    16741637         parcours_nom->o_val = 1 ; 
    16751638      } 
    1676       /*                                                                      */ 
    16771639      parcours_nom = parcours_nom -> suiv; 
    16781640   } 
     
    16881650   while ( parcours_nom ) 
    16891651   { 
    1690       /*                                                                      */ 
    16911652      parcours = List_Common_Var; 
    16921653      out = 0 ; 
     
    16951656         if ( !strcasecmp(parcours->var->v_commonname,parcours_nom->o_nom)  && 
    16961657              strcasecmp(parcours->var->v_subroutinename,"")                && 
    1697               !strcasecmp(parcours->var->v_commoninfile,mainfile)           && 
    1698               ( parcours->var->v_nbdim != 0 || 
    1699                 strcasecmp(parcours->var->v_initialvalue,"") 
    1700               ) ) out = 1; 
     1658              !strcasecmp(parcours->var->v_commoninfile,cur_filename)       && 
     1659              ( ( parcours->var->v_nbdim != 0 || !strcasecmp(parcours->var->v_typevar,"type") ) 
     1660              || strcasecmp(parcours->var->v_initialvalue,"") ) 
     1661            ) 
     1662         { 
     1663            out = 1; 
     1664         } 
    17011665         else parcours = parcours -> suiv; 
    17021666      } 
     
    17051669         parcours_nom->o_val = 1 ; 
    17061670      } 
    1707       /*                                                                      */ 
    17081671      parcours_nom = parcours_nom -> suiv; 
    17091672   } 
     
    17131676{ 
    17141677   listnom *parcours_nom; 
    1715    char ligne[LONG_C]; 
    1716    if ( firstpass == 0 ) 
    1717    { 
    1718       parcours_nom = List_NameOfCommon; 
    1719       while ( parcours_nom ) 
    1720       { 
    1721          if ( parcours_nom->o_val == 1 ) 
    1722          { 
    1723             strcpy(ligne,""); 
    1724             tofich(fortranout,ligne,1); 
    1725             sprintf (ligne, "module %s",parcours_nom->o_nom); 
    1726             tofich(fortranout,ligne,1); 
    1727             WriteUsemoduleDeclaration(parcours_nom->o_subroutinename); 
    1728             strcpy(ligne,"implicit none"); 
    1729             tofich(fortranout,ligne,1); 
    1730             sprintf (ligne, "public Alloc_agrif_%s",parcours_nom->o_nom); 
    1731             tofich(fortranout,ligne,1); 
    1732             strcpy (ligne, "contains"); 
    1733             tofich(fortranout,ligne,1); 
    1734             sprintf (ligne, "subroutine Alloc_agrif_%s(Agrif_Gr)", 
    1735                                                            parcours_nom->o_nom); 
    1736             tofich(fortranout,ligne,1); 
    1737             strcpy(ligne,"Use Agrif_Util"); 
    1738             tofich(fortranout,ligne,1); 
    1739             strcpy (ligne, "Type(Agrif_grid), Pointer :: Agrif_Gr"); 
    1740             tofich(fortranout,ligne,1); 
    1741             strcpy(ligne, "INTEGER :: i"); 
    1742             tofich (fortranout, ligne,1); 
    1743             strcpy (ligne, "\n#include \"alloc_agrif_"); 
    1744             strcat (ligne, parcours_nom->o_nom); 
    1745             strcat (ligne, ".h\"\n"); 
    1746             fprintf(fortranout,ligne); 
    1747             strcpy (ligne, "Return"); 
    1748             tofich(fortranout,ligne,1); 
    1749             sprintf (ligne, "end subroutine Alloc_agrif_%s", 
    1750                                                            parcours_nom->o_nom); 
    1751             tofich(fortranout,ligne,1); 
    1752             sprintf (ligne, "end module %s",parcours_nom->o_nom); 
    1753             tofich(fortranout,ligne,1); 
    1754             /* List all Call Alloc_agrif                                      */ 
    1755             Add_Subroutine_For_Alloc(parcours_nom->o_nom); 
    1756          } 
    1757          parcours_nom = parcours_nom->suiv; 
    1758       } 
     1678 
     1679   parcours_nom = List_NameOfCommon; 
     1680   while ( parcours_nom ) 
     1681   { 
     1682      if ( parcours_nom->o_val == 1 ) 
     1683      { 
     1684         fprintf(fortran_out, "      module %s\n\n", parcours_nom->o_nom); 
     1685         WriteUsemoduleDeclaration(parcours_nom->o_subroutinename); 
     1686         fprintf(fortran_out, "        implicit none\n"); 
     1687         fprintf(fortran_out, "        public :: Alloc_agrif_%s\n", parcours_nom->o_nom); 
     1688         fprintf(fortran_out, "      contains\n"); 
     1689         fprintf(fortran_out, "      subroutine Alloc_agrif_%s(Agrif_Gr)\n", parcours_nom->o_nom); 
     1690         fprintf(fortran_out, "        use Agrif_Util\n"); 
     1691         fprintf(fortran_out, "        type(Agrif_grid), pointer :: Agrif_Gr\n"); 
     1692         fprintf(fortran_out, "        integer :: i\n"); 
     1693         fprintf(fortran_out, "#include \"alloc_agrif_%s.h\"\n", parcours_nom->o_nom); 
     1694         fprintf(fortran_out, "      end subroutine Alloc_agrif_%s\n", parcours_nom->o_nom); 
     1695         fprintf(fortran_out, "      end module %s\n", parcours_nom->o_nom); 
     1696         /* List all Call Alloc_agrif                                      */ 
     1697         Add_Subroutine_For_Alloc(parcours_nom->o_nom); 
     1698      } 
     1699      parcours_nom = parcours_nom->suiv; 
    17591700   } 
    17601701} 
     
    17681709   listvar *parcours4; 
    17691710   int out; 
    1770    char name_module[LONG_C]; 
     1711   char name_module[LONG_M]; 
    17711712 
    17721713   /* We should integrate allocate and pointer variables                      */ 
    1773    parcours2 = List_Allocate_Var; 
    1774    while ( parcours2 ) 
    1775    { 
    1776       parcours4 = List_UsedInSubroutine_Var; 
    1777       out = 0 ; 
    1778       while ( parcours4 && out == 0 ) 
    1779       { 
    1780          if ( !strcasecmp(parcours2->a_nomvar,parcours4->var->v_nomvar) ) 
    1781          { 
    1782             Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename, 
    1783                                            parcours4->var->v_modulename); 
    1784             out = 1; 
    1785          } 
    1786          else parcours4 = parcours4 -> suiv ; 
    1787       } 
    1788       parcours2 = parcours2->suiv; 
    1789    } 
    1790    /*                                                                         */ 
    1791    parcours3 = List_Pointer_Var; 
    1792    while ( parcours3 ) 
    1793    { 
    1794       parcours4 = List_UsedInSubroutine_Var; 
    1795       out = 0 ; 
    1796       while ( parcours4 && out == 0 ) 
    1797       { 
    1798          if ( !strcasecmp(parcours3->n_name,parcours4->var->v_nomvar) ) 
    1799          { 
    1800             Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename, 
    1801                                            parcours4->var->v_modulename); 
    1802             out = 1; 
    1803          } 
    1804          else parcours4 = parcours4 -> suiv ; 
    1805       } 
    1806       parcours3 = parcours3 -> suiv; 
    1807    } 
    1808    /*                                                                         */ 
    1809    parcours4 = List_UsedInSubroutine_Var; 
    1810    while ( parcours4 ) 
    1811    { 
    1812       if ( parcours4->var->v_allocatable == 1 && strcasecmp(parcours4->var->v_typevar,"type")) 
    1813       { 
    1814          Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename, 
    1815                                         parcours4->var->v_modulename); 
    1816       } 
    1817       parcours4 = parcours4 -> suiv ; 
    1818    } 
    1819    /*                                                                         */ 
     1714//    parcours2 = List_Allocate_Var; 
     1715//    while ( parcours2 ) 
     1716//    { 
     1717//       parcours4 = List_UsedInSubroutine_Var; 
     1718//       out = 0 ; 
     1719//       while ( parcours4 && out == 0 ) 
     1720//       { 
     1721//          if ( !strcasecmp(parcours2->a_nomvar,parcours4->var->v_nomvar) ) 
     1722//          { 
     1723//             Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename, parcours4->var->v_modulename); 
     1724//             out = 1; 
     1725//          } 
     1726//          else parcours4 = parcours4 -> suiv ; 
     1727//       } 
     1728//       parcours2 = parcours2->suiv; 
     1729//    } 
     1730// 
     1731//    parcours3 = List_Pointer_Var; 
     1732//    while ( parcours3 ) 
     1733//    { 
     1734//       parcours4 = List_UsedInSubroutine_Var; 
     1735//       out = 0 ; 
     1736//       while ( parcours4 && out == 0 ) 
     1737//       { 
     1738//          if ( !strcasecmp(parcours3->n_name, parcours4->var->v_nomvar) ) 
     1739//          { 
     1740//             Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename, parcours4->var->v_modulename); 
     1741//             out = 1; 
     1742//          } 
     1743//          else parcours4 = parcours4 -> suiv ; 
     1744//       } 
     1745//       parcours3 = parcours3 -> suiv; 
     1746//    } 
     1747//    parcours4 = List_UsedInSubroutine_Var; 
     1748//    while ( parcours4 ) 
     1749//    { 
     1750//       if ( parcours4->var->v_allocatable == 1 && strcasecmp(parcours4->var->v_typevar,"type")) 
     1751//       { 
     1752//          Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename, parcours4->var->v_modulename); 
     1753//       } 
     1754//       parcours4 = parcours4 -> suiv ; 
     1755//    } 
     1756 
    18201757   parcours = List_SubroutineWhereAgrifUsed; 
    18211758   while ( parcours ) 
     
    18331770            if ( !strcasecmp(parcours->o_nom,parcours1->u_cursubroutine) ) 
    18341771            { 
    1835                strcpy(name_module,parcours->o_module); 
     1772               strcpy(name_module, parcours->o_module); 
    18361773            } 
    18371774            parcours1 = parcours1->suiv; 
    18381775         } 
    18391776      } 
    1840       /* if out == 0 we should look in the module declaration                 */ 
    1841       if ( out == 0 ) 
     1777      if ( out == 0 )   /* we should look in the module declaration */ 
    18421778      { 
    18431779         parcours1 = List_NameOfModuleUsed; 
     
    18531789      } 
    18541790      if ( out == 0 ) parcours->o_val = 1; 
    1855       /*                                                                      */ 
     1791 
    18561792      parcours = parcours->suiv; 
    18571793   } 
     
    18761812} 
    18771813 
    1878 void Affiche() 
    1879 { 
    1880    listvar *parcours; 
    1881  
    1882    parcours = (listvar *)NULL; 
     1814void Affiche(listvar *in_parcours) 
     1815{ 
    18831816/*   parcours = List_Global_Var;                  */ 
    18841817/*   parcours = List_SubroutineDeclaration_Var;   */ 
    1885  
    18861818/*   parcours = List_SubroutineArgument_Var;      */ 
    18871819/*   parcours = List_FunctionType_Var;            */ 
    1888  
    18891820/*   parcours = List_Data_Var;                    */ 
    18901821/*   parcours = List_Save_Var;                    */ 
     
    18931824/*   parcours = List_GlobalParameter_Var;         */ 
    18941825/*   parcours = List_NotGridDepend_Var;           */ 
    1895  
    18961826/*   parcours = List_Common_Var;                  */ 
     1827   listvar *parcours = in_parcours; 
    18971828 
    18981829   while( parcours ) 
    18991830   { 
    1900       printf("module- %s \n",parcours->var->v_modulename); 
    1901       printf("subroutine- %s  \n",parcours->var->v_subroutinename); 
    1902       printf("nom- %s  \n",parcours->var->v_nomvar); 
    1903       printf("common- %s  \n",parcours->var->v_commonname); 
    1904       printf("type- %s  \n",parcours->var->v_typevar); 
    1905       printf("indice- %d  \n",parcours->var->v_indicetabvars); 
    1906       printf("variableisparameter- %d \n",parcours->var->v_VariableIsParameter); 
    1907       printf("module1- %d  \n",parcours->var->v_module); 
    1908       printf("save- %d  \n",parcours->var->v_save); 
    1909       printf("notgrid- %d  \n",parcours->var->v_notgrid); 
    1910       printf("nbdim- %d  \n",parcours->var->v_nbdim); 
    1911       printf("common1- %d  \n",parcours->var->v_common); 
    1912       printf("v_dimensiongiven- %d  \n",parcours->var->v_dimensiongiven); 
    1913       printf("v_dimsempty- %d  \n",parcours->var->v_dimsempty); 
    1914       printf("initialvalue- %s\n \n",parcours->var->v_initialvalue); 
    1915       printf("dim- %s\n \n",parcours->var->v_readedlistdimension); 
     1831      printf("modulename     - %s \n", parcours->var->v_modulename); 
     1832      printf("subroutinename - %s \n", parcours->var->v_subroutinename); 
     1833      printf("nomvar         - %s \n", parcours->var->v_nomvar); 
     1834      printf("commonname     - %s \n", parcours->var->v_commonname); 
     1835      printf("commoninfile   - %s \n", parcours->var->v_commoninfile); 
     1836      printf("typevar        - %s \n", parcours->var->v_typevar); 
     1837      printf("catvar         - %d \n", parcours->var->v_catvar); 
     1838      printf("indicetabvars  - %d \n", parcours->var->v_indicetabvars); 
     1839      printf("isparameter    - %d \n", parcours->var->v_VariableIsParameter); 
     1840      printf("module         - %d \n", parcours->var->v_module); 
     1841      printf("save           - %d \n", parcours->var->v_save); 
     1842      printf("notgrid        - %d \n", parcours->var->v_notgrid); 
     1843      printf("nbdim          - %d \n", parcours->var->v_nbdim); 
     1844      printf("common         - %d \n", parcours->var->v_common); 
     1845      printf("dimensiongiven - %d \n", parcours->var->v_dimensiongiven); 
     1846      printf("dimsempty      - %d \n", parcours->var->v_dimsempty); 
     1847      printf("initialvalue   - %s \n", parcours->var->v_initialvalue); 
     1848      printf("readedlistdim  - %s \n", parcours->var->v_readedlistdimension); 
     1849      printf("-------------------------------------\n"); 
    19161850 
    19171851      parcours = parcours -> suiv ; 
    19181852   } 
    1919    if ( mark == 1 ) printf("Indicemaxtabvars = %d \n",indicemaxtabvars); 
    1920     
    1921 } 
    1922  
    1923  
    1924  
     1853   if ( todebug == 1 ) printf("Indicemaxtabvars = %d \n",indicemaxtabvars[0]); 
     1854} 
    19251855 
    19261856int SubInList_ContainsSubroutine() 
Note: See TracChangeset for help on using the changeset viewer.