Changeset 6237 for branches/UKMO/nemo_v3_6_STABLE_copy/NEMOGCM/EXTERNAL/AGRIF/LIB/WorkWithlistvarindoloop.c
- Timestamp:
- 2016-01-13T15:47:26+01:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/nemo_v3_6_STABLE_copy/NEMOGCM/EXTERNAL/AGRIF/LIB/WorkWithlistvarindoloop.c
r5781 r6237 34 34 /******************************************************************************/ 35 35 #include <stdio.h> 36 #include <stdlib.h>37 #include <string.h>36 //#include <stdlib.h> 37 //#include <string.h> 38 38 39 39 #include "decl.h" … … 47 47 /* */ 48 48 /******************************************************************************/ 49 void Add_UsedInSubroutine_Var_1 (c har *ident)49 void Add_UsedInSubroutine_Var_1 (const char *ident) 50 50 { 51 51 listvar *newvar; … … 59 59 if ( !List_UsedInSubroutine_Var ) 60 60 { 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)); 63 63 /* */ 64 64 Init_Variable(newvar->var); … … 66 66 newvar->suiv = NULL; 67 67 strcpy(newvar->var->v_nomvar,ident); 68 69 Save_Length(ident,4);70 68 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); 76 70 strcpy(newvar->var->v_subroutinename,subroutinename); 77 Save_Length(subroutinename,11);78 71 newvar->var->v_pointedvar=pointedvar; 79 72 List_UsedInSubroutine_Var = newvar ; 80 printf("jaoute %s\n",newvar->var->v_nomvar);81 73 } 82 74 else … … 94 86 if ( out == 0 ) 95 87 { 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)); 98 90 /* */ 99 91 Init_Variable(newvar->var); 100 92 /* */ 101 93 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); 106 95 strcpy(newvar->var->v_modulename,curmodulename); 107 Save_Length(curmodulename,6);108 printf("ICI %d\n",newvar->var->v_module);109 96 strcpy(newvar->var->v_subroutinename,subroutinename); 110 Save_Length(subroutinename,11);111 97 newvar->var->v_pointedvar=pointedvar; 112 98 newvar->suiv = List_UsedInSubroutine_Var; 113 printf("jaoute %s\n",newvar->var->v_nomvar); 114 List_UsedInSubroutine_Var = newvar; 99 List_UsedInSubroutine_Var = newvar; 115 100 } 116 101 } … … 134 119 if ( !List_UsedInSubroutine_Var ) 135 120 { 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)); 138 123 /* */ 139 124 Init_Variable(newvar->var); … … 141 126 newvar->suiv = NULL; 142 127 strcpy(newvar->var->v_nomvar,name); 143 144 Save_Length(name,4);145 128 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); 149 130 strcpy(newvar->var->v_subroutinename,subroutinename); 150 Save_Length(subroutinename,11);151 131 newvar->var->v_pointedvar=pointedvar; 152 132 List_UsedInSubroutine_Var = newvar ; … … 183 163 if ( out == 2 || out == 0 ) 184 164 { 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)); 187 167 /* */ 188 168 Init_Variable(newvar->var); 189 169 /* */ 190 170 strcpy(newvar->var->v_nomvar,name); 191 192 Save_Length(name,4);193 171 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); 197 173 strcpy(newvar->var->v_subroutinename,subroutinename); 198 Save_Length(subroutinename,11);199 174 newvar->var->v_pointedvar=pointedvar; 200 175 … … 254 229 void CompleteThelistvarindoloop() 255 230 { 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 */ 295 268 /******************************************************************************/ 296 269 /* */ 297 270 /******************************************************************************/ 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 ; 271 void 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 ; 415 399 } 416 400 … … 437 421 while ( parcours1 && out == 0 ) 438 422 { 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) 445 426 ) out = 1; 446 427 else parcours1 = parcours1->suiv; … … 448 429 /* if variable has been found */ 449 430 450 if ( out == 1 ) CopyRecord(parcours->var,parcours1->var);451 431 if ( out == 1 ) Merge_Variables(parcours->var,parcours1->var); 432 452 433 /* looking in List_Dimension_Var */ 453 434 if (out == 0 ) … … 471 452 } 472 453 /* if variable has been found */ 473 454 474 455 if ( out == 1 ) 475 456 { 476 CopyRecord(parcours->var,parcours1->var);457 Merge_Variables(parcours->var,parcours1->var); 477 458 /* we should remove this record from the List_Dimension_Var */ 478 459 if ( parcours1 == List_Dimension_Var ) … … 495 476 listvar *parcours; 496 477 listvar *newvar; 497 char ligne[LONG_C];478 char tmpname[LONG_VNAME]; 498 479 499 480 parcours = List_Save_Var; … … 503 484 /* Save in subroutine which is not defined in a module */ 504 485 { 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)); 507 488 /* */ 508 489 Init_Variable(newvar->var); 509 490 /* */ 510 491 newvar->suiv = NULL; 511 CopyRecord(parcours->var,newvar->var);492 Merge_Variables(parcours->var,newvar->var); 512 493 strcpy(newvar->var->v_subroutinename,parcours->var->v_subroutinename); 513 494 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); 519 499 List_Common_Var = AddListvarToListvar(newvar,List_Common_Var,1); 520 500 } … … 522 502 /* Save in subroutine which is defined in a module */ 523 503 { 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)); 526 506 /* */ 527 507 Init_Variable(newvar->var); … … 529 509 newvar->suiv = NULL; 530 510 531 CopyRecord(parcours->var,newvar->var);511 Merge_Variables(parcours->var,newvar->var); 532 512 strcpy(newvar->var->v_subroutinename,parcours->var->v_subroutinename); 533 513 534 514 strcpy(newvar->var->v_nomvar,parcours->var->v_nomvar); 535 515 516 newvar->var->v_catvar=parcours->var->v_catvar; 536 517 strcpy(newvar->var->v_modulename,parcours->var->v_modulename); 537 518 List_Global_Var = AddListvarToListvar(newvar,List_Global_Var,1); … … 560 541 { 561 542 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 } 569 548 else parcours1 = parcours1->suiv; 570 549 } … … 573 552 { 574 553 strcpy(parcours->var->v_commoninfile,parcours1->var->v_commoninfile); 575 576 CopyRecord(parcours->var,parcours1->var);554 555 Merge_Variables(parcours->var,parcours1->var); 577 556 } 578 557 parcours = parcours->suiv; … … 587 566 void Update_List_Var(listvar *list_to_modify) 588 567 { 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; 629 588 } 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 else640 {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 }656 589 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 ; 667 601 out = 0; 668 while ( parcours1 && out == 0)602 while ( parcours1 ) 669 603 { 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; 678 612 } 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 } 688 641 } 689 642 … … 696 649 int out; 697 650 698 651 699 652 parcours = List_UsedInSubroutine_Var; 700 653 while( parcours ) 701 654 { 702 655 out = 0 ; 703 printf("OIEROZEIR %s %s\n",parcours->var->v_nomvar,parcours->var->v_modulename);704 656 if ( parcours->var->v_indicetabvars == 0 ) 705 657 { 706 printf("OIEROZEIR %s\n",parcours->var->v_nomvar);707 658 parcours2 = List_NameOfModuleUsed; 708 659 while( parcours2 ) 709 660 { 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) ) 714 663 { 715 664 parcours3 = List_Global_Var; … … 722 671 else parcours3 = parcours3->suiv; 723 672 } 724 if ( out == 1 ) CopyRecord(parcours->var,parcours3->var);673 if ( out == 1 ) Merge_Variables(parcours->var,parcours3->var); 725 674 } 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) ) 731 677 { 732 678 parcours3 = List_Global_Var; … … 739 685 else parcours3 = parcours3->suiv; 740 686 } 741 if ( out == 1 ) CopyRecord(parcours->var,parcours3->var);687 if ( out == 1 ) Merge_Variables(parcours->var,parcours3->var); 742 688 } 743 689 parcours2 = parcours2->suiv; … … 755 701 else parcours3 = parcours3->suiv; 756 702 } 757 if ( out == 1 ) CopyRecord(parcours->var,parcours3->var);703 if ( out == 1 ) Merge_Variables(parcours->var,parcours3->var); 758 704 } 759 705 /* */ … … 792 738 if ( out == 1 ) 793 739 { 794 CopyRecord(parcours->var,parcours1->var);740 Merge_Variables(parcours->var,parcours1->var); 795 741 strcpy(parcours->var->v_subroutinename, 796 742 parcours1->var->v_subroutinename); … … 841 787 } 842 788 843 int LookingForVariableInListName(listvar *listin,c har *name)789 int LookingForVariableInListName(listvar *listin,const char *name) 844 790 { 845 791 listvar *parcours1; … … 860 806 } 861 807 808 variable *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 862 826 int LookingForVariableInListGlob(listvar *listin,variable *var) 863 827 { … … 897 861 void UpdateListDeclarationWithDimensionList() 898 862 { 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); 901 864 } 902 865 … … 915 878 listvar *parcoursprec; 916 879 int remove; 917 918 880 919 881 parcoursprec = (listvar *)NULL; 920 882 parcours = List_UsedInSubroutine_Var; 921 883 while ( parcours ) 922 884 { 923 /* */ 924 remove = LookingForVariableInListGlobal(List_SubroutineArgument_Var, 925 parcours->var); 885 remove = LookingForVariableInListGlobal(List_SubroutineArgument_Var, parcours->var); 926 886 if ( remove == 0 ) 927 remove = LookingForVariableInList(List_SubroutineDeclaration_Var, 928 parcours->var); 929 887 remove = LookingForVariableInList(List_SubroutineDeclaration_Var, parcours->var); 930 888 if ( remove == 0 ) 931 remove = LookingForVariableInList(List_Parameter_Var, 932 parcours->var); 889 remove = LookingForVariableInList(List_Parameter_Var, parcours->var); 933 890 if ( remove == 0 ) 934 remove = LookingForVariableInList(List_FunctionType_Var, 935 parcours->var); 891 remove = LookingForVariableInList(List_FunctionType_Var, parcours->var); 936 892 if ( remove == 0 ) 937 remove = LookingForVariableInListGlob(List_GlobalParameter_Var, 938 parcours->var); 939 893 remove = LookingForVariableInListGlob(List_GlobalParameter_Var, parcours->var); 940 894 if ( remove == 0 ) 941 remove = LookingForVariableInListParamGlob( 942 List_GlobParamModuleUsed_Var,parcours->var); 943 944 895 remove = LookingForVariableInListParamGlob(List_GlobParamModuleUsed_Var, parcours->var); 945 896 if ( remove == 0 ) 946 897 { … … 976 927 } 977 928 } 978 979 980 929 } 981 930 … … 1023 972 } 1024 973 } 1025 1026 974 } 1027 975 … … 1032 980 listvar *parcoursprec; 1033 981 int out ; 1034 982 1035 983 parcoursprec = (listvar *)NULL; 1036 984 parcours = List_SubroutineDeclaration_Var; … … 1041 989 while ( parcours1 && out == 0 ) 1042 990 { 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) 1047 993 ) out = 1; 1048 994 else parcours1 = parcours1->suiv; … … 1054 1000 while ( parcours1 && out == 0 ) 1055 1001 { 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) 1060 1004 ) out = 1; 1061 1005 else parcours1 = parcours1->suiv; … … 1083 1027 } 1084 1028 } 1085 1086 1029 } 1087 1030 … … 1133 1076 parcours2->var->v_modulename) ) 1134 1077 { 1135 CopyRecord(parcours->var,parcours2->var);1078 Merge_Variables(parcours->var,parcours2->var); 1136 1079 /* remove var from the parcours2 */ 1137 1080 parcours2prec ->suiv = parcours2->suiv; … … 1160 1103 Clean_List_UsedInSubroutine_Var(); 1161 1104 Clean_List_SubroutineDeclaration_Var(); 1162 1105 1163 1106 newvar = (listvar *)NULL; 1164 1107 /* newvar = List_Common_Var;*/ … … 1184 1127 void ListUpdate() 1185 1128 { 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 } 1221 1160 } 1222 1161 … … 1273 1212 parcours = parcours -> suiv ; 1274 1213 } 1275 1214 1276 1215 } 1277 1216 … … 1284 1223 int position; 1285 1224 int out; 1286 char name_sub[LONG_ C];1225 char name_sub[LONG_M]; 1287 1226 1288 1227 parcours = List_SubroutineArgument_Var; … … 1343 1282 parcours = parcours->suiv; 1344 1283 } 1345 1284 1346 1285 } 1347 1286 … … 1364 1303 parcoursprec = (listvar *)NULL; 1365 1304 1366 if ( mark== 1 ) printf("MODULE Treated %s \n",nom);1305 if ( todebug == 1 ) printf("MODULE Treated %s \n",nom); 1367 1306 1368 1307 List_ModuleUsed_Var = (listvar *)NULL; … … 1389 1328 if ( out == 1 ) 1390 1329 { 1391 CopyRecord(parcours->var,parcours1->var);1330 Merge_Variables(parcours->var,parcours1->var); 1392 1331 /* Remove this variable from the List_ModuleUsed_Var */ 1393 1332 if ( parcours1 == List_ModuleUsed_Var ) … … 1405 1344 /* if we do not found the var Module name in the old list */ 1406 1345 { 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 // } 1421 1362 } 1422 1363 } … … 1428 1369 while ( parcours1 ) 1429 1370 { 1430 newindice=(listindice *) malloc (sizeof(listindice));1371 newindice=(listindice *) calloc(1,sizeof(listindice)); 1431 1372 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; 1434 1375 parcours1 = parcours1->suiv; 1435 1376 } … … 1444 1385 listvar *parcours; 1445 1386 1446 if ( mark== 1 ) printf("MODULE No Treated %s \n",nom);1387 if ( todebug == 1 ) printf("MODULE No Treated %s \n",nom); 1447 1388 1448 1389 parcours = List_Global_Var; … … 1454 1395 ) 1455 1396 { 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]; 1458 1399 } 1459 1400 parcours = parcours->suiv; … … 1474 1415 { 1475 1416 strcpy(parcours->var->v_commoninfile,record->var->v_commoninfile); 1476 CopyRecord(parcours->var,record->var);1417 Merge_Variables(parcours->var,record->var); 1477 1418 } 1478 1419 parcours = parcours -> suiv; … … 1490 1431 { 1491 1432 listvar *parcours; 1492 listvar *parcoursprec;1493 1433 listvar *parcours1; 1494 1434 listvar *List_CommonUsed_Var; … … 1496 1436 int out; 1497 1437 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); 1501 1439 1502 1440 List_CommonUsed_Var = (listvar *)NULL; … … 1518 1456 else 1519 1457 { 1520 parcoursprec = parcours1 ;1521 1458 parcours1 = parcours1->suiv; 1522 1459 } … … 1527 1464 strcpy(parcours->var->v_commoninfile, 1528 1465 parcours1->var->v_commoninfile); 1529 CopyRecord(parcours->var,parcours1->var);1466 Merge_Variables(parcours->var,parcours1->var); 1530 1467 } 1531 1468 else 1532 1469 /* if we do not found the var common name in the old list */ 1533 1470 { 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 // } 1548 1487 } 1549 1488 /* Look in the remaining list in the variable is define */ … … 1559 1498 if ( parcours1 -> var -> v_indicetabvars == 0 ) 1560 1499 { 1561 newindice=(listindice *) malloc (sizeof(listindice));1500 newindice=(listindice *) calloc(1,sizeof(listindice)); 1562 1501 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; 1565 1504 } 1566 1505 parcours1 = parcours1->suiv; 1567 1506 } 1568 1507 } 1508 1509 void 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 1569 1529 /******************************************************************************/ 1570 1530 /* IndiceTabvars_Common_Var_No_Treated */ … … 1577 1537 listvar *parcours2; 1578 1538 1579 if ( mark== 1 ) printf("COMMON No Treated %s \n",nom);1539 if ( todebug == 1 ) printf("COMMON No Treated %s \n",nom); 1580 1540 1581 1541 parcours = List_Common_Var; … … 1587 1547 ) 1588 1548 { 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]; 1591 1551 parcours2 = parcours; 1592 1552 while ( parcours2 ) … … 1619 1579 while ( parcours_nom ) 1620 1580 { 1621 if ( Did_module_common_treaded(parcours_nom->o_nom) == 1 )1581 if ( is_dependfile_created(parcours_nom->o_nom) == 1 ) 1622 1582 { 1623 1583 IndiceTabvars_Global_Var_Treated(parcours_nom->o_nom); … … 1633 1593 while ( parcours_nom ) 1634 1594 { 1635 if ( Did_module_common_treaded(parcours_nom->o_nom) == 1 )1595 if ( is_dependfile_created(parcours_nom->o_nom) == 1 ) 1636 1596 { 1637 1597 IndiceTabvars_Common_Var_Treated(parcours_nom->o_nom); … … 1663 1623 !strcasecmp(parcours->var->v_subroutinename,"") && 1664 1624 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")) && 1666 1626 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 } 1670 1633 else parcours = parcours -> suiv; 1671 1634 } 1672 if ( out == 1)1635 if ( out ) 1673 1636 { 1674 1637 parcours_nom->o_val = 1 ; 1675 1638 } 1676 /* */1677 1639 parcours_nom = parcours_nom -> suiv; 1678 1640 } … … 1688 1650 while ( parcours_nom ) 1689 1651 { 1690 /* */1691 1652 parcours = List_Common_Var; 1692 1653 out = 0 ; … … 1695 1656 if ( !strcasecmp(parcours->var->v_commonname,parcours_nom->o_nom) && 1696 1657 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 } 1701 1665 else parcours = parcours -> suiv; 1702 1666 } … … 1705 1669 parcours_nom->o_val = 1 ; 1706 1670 } 1707 /* */1708 1671 parcours_nom = parcours_nom -> suiv; 1709 1672 } … … 1713 1676 { 1714 1677 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; 1759 1700 } 1760 1701 } … … 1768 1709 listvar *parcours4; 1769 1710 int out; 1770 char name_module[LONG_ C];1711 char name_module[LONG_M]; 1771 1712 1772 1713 /* 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 1820 1757 parcours = List_SubroutineWhereAgrifUsed; 1821 1758 while ( parcours ) … … 1833 1770 if ( !strcasecmp(parcours->o_nom,parcours1->u_cursubroutine) ) 1834 1771 { 1835 strcpy(name_module, parcours->o_module);1772 strcpy(name_module, parcours->o_module); 1836 1773 } 1837 1774 parcours1 = parcours1->suiv; 1838 1775 } 1839 1776 } 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 */ 1842 1778 { 1843 1779 parcours1 = List_NameOfModuleUsed; … … 1853 1789 } 1854 1790 if ( out == 0 ) parcours->o_val = 1; 1855 /* */ 1791 1856 1792 parcours = parcours->suiv; 1857 1793 } … … 1876 1812 } 1877 1813 1878 void Affiche() 1879 { 1880 listvar *parcours; 1881 1882 parcours = (listvar *)NULL; 1814 void Affiche(listvar *in_parcours) 1815 { 1883 1816 /* parcours = List_Global_Var; */ 1884 1817 /* parcours = List_SubroutineDeclaration_Var; */ 1885 1886 1818 /* parcours = List_SubroutineArgument_Var; */ 1887 1819 /* parcours = List_FunctionType_Var; */ 1888 1889 1820 /* parcours = List_Data_Var; */ 1890 1821 /* parcours = List_Save_Var; */ … … 1893 1824 /* parcours = List_GlobalParameter_Var; */ 1894 1825 /* parcours = List_NotGridDepend_Var; */ 1895 1896 1826 /* parcours = List_Common_Var; */ 1827 listvar *parcours = in_parcours; 1897 1828 1898 1829 while( parcours ) 1899 1830 { 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"); 1916 1850 1917 1851 parcours = parcours -> suiv ; 1918 1852 } 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 } 1925 1855 1926 1856 int SubInList_ContainsSubroutine()
Note: See TracChangeset
for help on using the changeset viewer.