Changeset 279 for anr/gantt.l


Ignore:
Timestamp:
Nov 24, 2010, 5:44:26 PM (14 years ago)
Author:
coach
Message:

1) Fixed problems with the \CoutHorsD macro.
2) Renamed as \OtherPartner?{debu}{fin}{partener}{moyen-an-1:moyen-an-2:moyen-an-3}.
3) Updated document for using it.
4) Changed the "model use" delivrable.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • anr/gantt.l

    r278 r279  
    5454
    5555typedef struct _Tlivrable {
    56     int tn,stn,dn,vn;  // task, sub-task, number
    5756    char v;            // 0, 1, 2, ..., F
    5857    char* kind;
     
    6059    int   bm,em;       // mois de bebut et de fin
    6160    double hman[3];    // nombre de mh par an
     61    int tn,stn,dn,vn;  // task, sub-task, number
     62    int    leader;     // 1: the partner leads this livrable
     63                       // 0: the partner helps for this livrable
    6264    int    partner;    // index dans partner_table
    6365    // these fields are filled by the program for data[tn][0][0][0]
     
    6769    double nbma[3];          // durée en mois par annee
    6870    // these fields are filled by the program for data[tn][stn][dn][0]
    69     struct _Tlivrable
    70             **vers; // null termiated (vers[i] = &data[tn][stn][dn][i])
    71     int    nbvers;     // nombre de vers
     71    struct _Tlivrable // versions of the livrable
     72            **vers; // null termiated (vers[i] = data[tn][stn][dn][j])
     73                    // this->leader == 1
     74                    // vers[0] = this
     75                    // vers[i]->leadaer == this->leader
     76                    // vers[i]->partner == this->partner
     77    int    nbvers;  // nombre de vers
    7278    double height;     // height of livrable
    7379    // int del_bm,del_em;    // mois de bebut et de fin cummule
     
    7581    int   nbTitleLines;
    7682    char* titleLines[5]; // null termiated
     83    struct _Tlivrable // participant to the livrable
     84            **part; // null termiated (vers[i] = data[tn][stn][dn][j])
     85                    // this->leader == 1
     86                    // vers[i] != this
     87                    // vers[i]->leader ==  0
     88                    // vers[i]->partner != this->partner
     89    int    nbpart;  // nombre de vers
    7790} Tlivrable;
    7891
     
    215228 double an[3];
    216229 char*  an_comment;
     230 int    leader;
    217231 int    partner;
    218232#.*\n   ;
     233L=1       { leader=1; }
     234L=0       { leader=0; }
    219235T=[0-9]+  { tn=atoi(yytext+2); }
    220236S=[0-9]+  { stn=atoi(yytext+2); }
    221237D=[0-9]+  { dn=atoi(yytext+2); }
    222 D=none    { dn=-2; }
    223238V=V[1-8F] { v=yytext[3]; }
    224239ML=[0-9]+ {
     
    282297        p->hman[1] = an[1];
    283298        p->hman[2] = an[2];
     299        p->leader = leader;
    284300        p->partner = partner;
    285301        p->title = title;
     
    297313        an_comment=0;
    298314        partner=0;
     315        leader=0;
    299316    }
    300317[ \t\n] ;
     
    375392void prepare3(Tdata* data)
    376393{
    377 int tn,stn,dn,vn;
     394int tn,stn,dn,vn,cnt;
     395Tlivrable* tmp;
    378396    for (tn=0 ; tn<T_MAX ; tn++)
    379397    for (stn=0; stn<S_MAX; stn++)
     
    382400        if (p==0) continue;
    383401        p->nbvers=0 ;
    384         for (vn=0 ; vn<V_MAX ; vn+=1)
    385             if (data->ls[tn][stn][dn][vn]!=0) p->nbvers+=1;
     402        p->nbpart=0 ;
     403        for (vn=0 ; vn<V_MAX ; vn+=1) {
     404            tmp = data->ls[tn][stn][dn][vn];
     405            if (tmp==0) continue;
     406            if (tmp->leader==0)
     407               p->nbpart+=1;
     408            else
     409                p->nbvers+=1;
     410        }
    386411        p->vers=(Tlivrable**)malloc(sizeof(*p->vers)*(p->nbvers+1));
    387         for (vn=0 ; vn<p->nbvers ; vn+=1) {
    388             p->vers[vn] = data->ls[tn][stn][dn][vn];
    389             data->ls[tn][stn][dn][vn]->nbvers = p->nbvers;
    390         }
    391         p->vers[vn] = 0;
     412        for (vn=0,cnt=0 ; vn<V_MAX ; vn+=1) {
     413            tmp = data->ls[tn][stn][dn][vn];
     414            if (tmp!=0 && tmp->leader==1) {
     415                p->vers[cnt++] = tmp;
     416                tmp->nbvers = p->nbvers;
     417             }
     418        }
     419        p->vers[cnt] = 0;
     420        if (p->nbpart!=0) {
     421            p->part=(Tlivrable**)malloc(sizeof(*p->part)*(p->nbpart+1));
     422            for (vn=0,cnt=0 ; vn<V_MAX ; vn+=1) {
     423                tmp = data->ls[tn][stn][dn][vn];
     424                if (tmp!=0 && tmp->leader==0) {
     425                    p->part[cnt++] = tmp;
     426                 }
     427            }
     428            p->part[cnt] = 0;
     429        }
     430
    392431        p->height = 1.0*DELIVRABLE_HEIGHT;
    393432        if (p->nbTitleLines>=1) {
     
    429468    for (stn=0 ; curr->ls[tn][stn][0][0]!=0 ; stn++)
    430469        for (dn=0 ; curr->ls[tn][stn][dn][0]!=0 ; dn++) {
    431             if ( curr->ls[tn][stn][dn][0]->dn<0 ) continue;
     470            if ( curr->ls[tn][stn][dn][0]->leader==0 ) continue;
    432471            nblivrables += 1;
    433472            height+=curr->ls[tn][stn][dn][0]->height;
     
    635674}
    636675
     676Tlivrable* do_partner_table_getLivrable(Tlivrable** leader, Tlivrable* top, int partner)
     677{
     678    int i;
     679    Tlivrable* ret;
     680    *leader=top->vers[top->nbvers-1];
     681    if (leader[0]->partner==partner)
     682        return *leader;
     683    for (i=0; i<top->nbpart ; i+=1) {
     684        ret= top->part[i];
     685        if ( ret->partner==partner )
     686                return ret;
     687    }
     688    return 0;
     689}
     690
    637691void do_partner_table_full(int partner)
    638692{
     
    662716        for (stn=0; stn<S_MAX; stn++) {
    663717            for (dn=0; dn<D_MAX; dn++) {
     718                Tlivrable *lcurr,*leader;
    664719                Tlivrable* top=curr->ls[tn][stn][dn][v];
    665720                if (top==0) continue;
    666                 Tlivrable* last=top->vers[top->nbvers-1];
    667                 if (last->partner!=partner) continue;
     721                if ( (lcurr=do_partner_table_getLivrable(&leader,top,partner))==0 )
     722                    continue;
    668723                double sum1,sum2,sum3,sum=0;
    669                 sum1 = last->hman[0]; sum +=sum1;
    670                 sum2 = last->hman[1]; sum +=sum2;
    671                 sum3 = last->hman[2]; sum +=sum3;
     724                sum1 = lcurr->hman[0]; sum +=sum1;
     725                sum2 = lcurr->hman[1]; sum +=sum2;
     726                sum3 = lcurr->hman[2]; sum +=sum3;
    672727                char label[1000],title[1000];
    673                 gen_label_base(label,last);
    674                 sprintf(title,"\\resstablestyletitle{%s}",last->title);
     728                gen_label_base(label,leader);
     729                sprintf(title,"\\resstablestyletitle{%s}",leader->title);
    675730                fprintf(curr->os,"%s & %s & %2.1f & %2.1f & %2.1f & %2.1f \\\\\\hline\n",
    676731                   label,title,sum1,sum2,sum3,sum);
     
    680735                an  += sum  ; tsk  += sum  ;
    681736                newlineadded=0;
    682                 if ( sum1==0 && last->nbma[0]!=0)
     737                if ( sum1==0 && leader->nbma[0]!=0)
    683738                    fprintf(stderr,"ERROR:   %-10s:%s probleme sur l'an 1 (in table=%2.1f, in gantt=%2.1f\n",
    684                         part->name,label,sum1,last->nbma[0]);
    685                 else if (sum1!=0 && last->nbma[0]==0 )
     739                        part->name,label,sum1,leader->nbma[0]);
     740                else if (sum1!=0 && leader->nbma[0]==0 )
    686741                    fprintf(stderr,"ERROR:   %-10s:%s probleme sur l'an 1 (in table=%2.1f, in gantt=%2.1f\n",
    687                         part->name,label,sum1,last->nbma[0]);
    688                 else if (sum1!=0 && sum1>last->nbma[0] )
     742                        part->name,label,sum1,leader->nbma[0]);
     743                else if (sum1!=0 && sum1>leader->nbma[0] )
    689744                    fprintf(stderr,"WARNING: %-10s:%s probleme sur l'an 1 (in table=%2.1f, in gantt=%2.1f\n",
    690                         part->name,label,sum1,last->nbma[0]);
    691                 if ( sum2==0 && last->nbma[1]!=0)
     745                        part->name,label,sum1,leader->nbma[0]);
     746                if ( sum2==0 && leader->nbma[1]!=0)
    692747                    fprintf(stderr,"ERROR:   %-10s:%s probleme sur l'an 2 (in table=%2.1f, in gantt=%2.1f\n",
    693                         part->name,label,sum2,last->nbma[1]);
    694                 else if ( sum2!=0 && last->nbma[1]==0)
     748                        part->name,label,sum2,leader->nbma[1]);
     749                else if ( sum2!=0 && leader->nbma[1]==0)
    695750                    fprintf(stderr,"ERROR:   %-10s:%s probleme sur l'an 2 (in table=%2.1f, in gantt=%2.1f\n",
    696                         part->name,label,sum2,last->nbma[1]);
    697                 else if (sum2!=0 && sum2>last->nbma[1])
     751                        part->name,label,sum2,leader->nbma[1]);
     752                else if (sum2!=0 && sum2>leader->nbma[1])
    698753                    fprintf(stderr,"WARNING: %-10s:%s probleme sur l'an 2 (in table=%2.1f, in gantt=%2.1f\n",
    699                         part->name,label,sum2,last->nbma[1]);
    700                 if ( sum3==0 && last->nbma[2]!=0)
     754                        part->name,label,sum2,leader->nbma[1]);
     755                if ( sum3==0 && leader->nbma[2]!=0)
    701756                    fprintf(stderr,"ERROR:   %-10s:%s probleme sur l'an 3 (in table=%2.1f, in gantt=%2.1f\n",
    702                         part->name,label,sum3,last->nbma[2]);
    703                 else if ( sum3!=0 && last->nbma[2]==0)
     757                        part->name,label,sum3,leader->nbma[2]);
     758                else if ( sum3!=0 && leader->nbma[2]==0)
    704759                    fprintf(stderr,"ERROR:   %-10s:%s probleme sur l'an 3 (in table=%2.1f, in gantt=%2.1f\n",
    705                         part->name,label,sum3,last->nbma[2]);
    706                 else if (sum3!=0 && sum3>last->nbma[2])
     760                        part->name,label,sum3,leader->nbma[2]);
     761                else if (sum3!=0 && sum3>leader->nbma[2])
    707762                    fprintf(stderr,"WARNING: %-10s:%s probleme sur l'an 3 (in table=%2.1f, in gantt=%2.1f\n",
    708                         part->name,label,sum3,last->nbma[2]);
     763                        part->name,label,sum3,leader->nbma[2]);
    709764            }
    710765        }
     
    749804        for (stn=0; stn<S_MAX; stn++) {
    750805            for (dn=0; dn<D_MAX; dn++) {
     806                Tlivrable *lcurr,*leader;
    751807                Tlivrable* top=curr->ls[tn][stn][dn][v];
    752808                if (top==0) continue;
    753                 Tlivrable* last=top->vers[top->nbvers-1];
    754                 if (last->partner!=partner) continue;
     809                if ( (lcurr=do_partner_table_getLivrable(&leader,top,partner))==0 )
     810                    continue;
    755811                double sum1,sum2,sum3,sum=0;
    756                 sum1 = last->hman[0]; sum +=sum1;
    757                 sum2 = last->hman[1]; sum +=sum2;
    758                 sum3 = last->hman[2]; sum +=sum3;
     812                sum1 = lcurr->hman[0]; sum +=sum1;
     813                sum2 = lcurr->hman[1]; sum +=sum2;
     814                sum3 = lcurr->hman[2]; sum +=sum3;
    759815                an1 += sum1 ; tsk1 += sum1 ;
    760816                an2 += sum2 ; tsk2 += sum2 ;
     
    763819                newlineadded=0;
    764820                char label[1000];
    765                 gen_label_base(label,last);
     821                gen_label_base(label,leader);
    766822            }
    767823        }
     
    829885            Tlivrable* l = curr->ls[tn][stn][dn][v];
    830886            if ( l==0 ) break;
    831             if ( l->dn<0 ) continue;
     887            if ( l->leader==0 ) continue;
    832888            char label[1000],resp[100],date[100],kind[100],desc[1000];
    833889            gen_label_full(label,l);
Note: See TracChangeset for help on using the changeset viewer.