home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #3 / amigamamagazinepolishissue1998.iso / bazy / carcosts / source / liste.c < prev    next >
C/C++ Source or Header  |  1996-11-02  |  11KB  |  406 lines

  1. #include "demo.h"
  2. #include "Daten.h" 
  3.  
  4.  struct DateTime theday;
  5.  
  6.  
  7.  
  8. /*************************************************************************
  9.  *************************************************************************
  10.  *************************************************************************
  11.  
  12. Function: ConvertToDays()
  13.  Converts a string into days (since 1.1.78, I think).
  14.  First tries Start_Format as format and if that does not work, it
  15.  checks every possible format.
  16.  
  17. Return:
  18.  -1: No valid date
  19.  >0: Number of days 
  20.  
  21. Author: Rüdiger Dreier
  22.  
  23. History:
  24.  04.04.1992: Initial version
  25.  10.10.1993: No checks every possible format.
  26.  11.10.1993: Start_Format as first check added (otherwise there are problems
  27.              with the two formats dd.mm.yy and mm.dd.yy ...)
  28.              
  29.  *************************************************************************
  30.  *************************************************************************
  31.  *************************************************************************/
  32.  
  33.  LONG ConvertToDays(char *date)
  34.   {
  35.    LONG result;
  36.    LONG Days, i;
  37.    
  38.    if(!date) return(-1);
  39.    
  40.    if(date[strlen(date)-1] == ' ') date[strlen(date)-1] = 0;
  41.    
  42.    theday.dat_Format  = Start_Format;
  43.    theday.dat_StrDate = date;
  44.    
  45.    if(date[0] == 0) return(-1); /* Leerer String = FEHLER */
  46.    
  47.    /* Zunächst mit gewähltem Format probieren    */
  48.    /* Falls nicht erkannt, alle Format probieren */
  49.    result = StrToDate(&theday);
  50.    if(!result)
  51.     {
  52.      for(i=0;i<=4;i++)
  53.       {
  54.        theday.dat_Format  = i;
  55.        result = StrToDate(&theday);
  56.        if(result) break;
  57.       }
  58.     }
  59.    
  60.    if(result == 0) return(-1);
  61.    
  62.    Days = theday.dat_Stamp.ds_Days;
  63.    
  64.    /* Days wieder in String wandeln */
  65.    ConvertToString(Days, date);
  66.    
  67.    return(Days);
  68.   }
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77. /*************************************************************************
  78.  *************************************************************************
  79.  *************************************************************************
  80.  
  81. Function: ConvertToString()
  82.  Converts an integer (number of days since 1.1.78) to a string. 
  83.  Start_Format is used as format. 
  84.  
  85. Return: VOID
  86.  
  87. Author: Rüdiger Dreier
  88.  
  89. History:
  90.  07.09.1992: Initial version
  91.  
  92.  *************************************************************************
  93.  *************************************************************************
  94.  *************************************************************************/
  95.  
  96.  VOID ConvertToString(LONG Days, char *Ziel)
  97.   {
  98.    LONG result;
  99.    char Buffer[20];
  100.    
  101.    theday.dat_Stamp.ds_Days = Days;
  102.    theday.dat_Format        = Start_Format ;
  103.    theday.dat_StrDate       = Buffer;
  104.    
  105.    /* Datum ins Einheitsformat wandeln */
  106.    result = DateToStr(&theday);
  107.    if(Buffer[strlen(Buffer)-1] == ' ') Buffer[strlen(Buffer)-1] = 0;
  108.    if(result != 0) strcpy(Ziel,Buffer);
  109.   }
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122. /*************************************************************************
  123.  *************************************************************************
  124.  *************************************************************************
  125.  
  126. Function: ReCalcTreib()
  127.  Recalculates every entries in the fuel list. Some global datas (kilometer
  128.  etc.) are updated, too.
  129.  
  130. Return:
  131.  FALSE: No errors
  132.  >0: date (days since 1.1.78) of entry with negative delta kilometer
  133.  
  134. Author: Rüdiger Dreier
  135.  
  136. History:
  137.  01.10.1993: Initial version
  138.  
  139.  *************************************************************************
  140.  *************************************************************************
  141.  *************************************************************************/
  142.  
  143.  LONG ReCalcTreib(VOID)
  144.   {
  145.    struct NodeTreib *nt;
  146.    struct NodeUnter *nu;
  147.    LONG maxt, maxu, i;
  148.    LONG lastkm = Start_KM;
  149.    DOUBLE Liter = 0., Preist = 0., Preisu = 0.;
  150.    LONG flag = FALSE;
  151.    
  152.    get(LI_Treib, MUIA_List_Entries, &maxt);
  153.    get(LI_Unter, MUIA_List_Entries, &maxu);
  154.    
  155.    DoMethod(LI_Treib, MUIM_List_GetEntry, maxt-1, &nt);
  156.    DoMethod(LI_Unter, MUIM_List_GetEntry, maxu-1, &nu);
  157.    
  158.    strcpy(Daten.SDatum,"---------");
  159.    strcpy(Daten.EDatum,"---------");
  160.    Daten.Kilometer = 0;
  161.    
  162.    for(i=0;i<maxt;i++)
  163.     {
  164.      DoMethod(LI_Treib, MUIM_List_GetEntry, i, &nt);
  165.      
  166.      nt->deltakm   = nt->kmStand-lastkm;
  167.      lastkm        = nt->kmStand;
  168.      if(nt->deltakm <= 0) flag = nt->Days;
  169.      
  170.      if(nt->deltakm != 0.)
  171.       {
  172.        nt->Verbrauch = 100.*nt->Liter/(nt->deltakm);
  173.       }
  174.      else
  175.       {
  176.        nt->Verbrauch = 0.;
  177.       }
  178.      Liter  += nt->Liter;
  179.      Preist += nt->Preis;
  180.      FillTreib(nt);
  181.     }
  182.    
  183.    if(nt)
  184.     {
  185.      Daten.Kilometer = nt->kmStand - Start_KM;
  186.      if(nu)
  187.       {
  188.        if(nu->Days > nt->Days)
  189.         {
  190.          strcpy(Daten.EDatum, nu->Datum);
  191.         }
  192.        else
  193.         {
  194.          strcpy(Daten.EDatum, nt->Datum);
  195.         }
  196.       }
  197.      else
  198.       {
  199.        strcpy(Daten.EDatum, nt->Datum);
  200.       }
  201.     }
  202.    if(Start_Day != 0) strcpy(Daten.SDatum, Start_Datum);
  203.    
  204.    for(i=0;i<maxu;i++)
  205.     {
  206.      DoMethod(LI_Unter, MUIM_List_GetEntry, i, &nu);
  207.      Preisu += nu->Preis;
  208.     }
  209.    Daten.TreibGes = Preist;
  210.    Daten.UnterGes = Preisu;
  211.    Daten.Liter    = Liter;
  212.    
  213.    sprintf(Daten.Literstring, FORMAT_LITER"%s", 
  214.            Liter,
  215.            TEXT(MSG_LITER_SHORT_TEXT));
  216.    sprintf(Daten.UnterGesstring, FORMAT_DM"%s", 
  217.            Preisu,
  218.            TEXT(MSG_MONEY_SHORT_TEXT));
  219.    sprintf(Daten.TreibGesstring, FORMAT_DM"%s", 
  220.            Preist,
  221.            TEXT(MSG_MONEY_SHORT_TEXT));
  222.    sprintf(Daten.Gesstring, FORMAT_DM"%s", 
  223.            Preist+Preisu,
  224.            TEXT(MSG_MONEY_SHORT_TEXT));
  225.    sprintf(Daten.kmstring, FORMAT_KILOMETER"%s", 
  226.            Daten.Kilometer,
  227.            TEXT(MSG_KILOMETER_SHORT_TEXT));
  228.    
  229.    if(Daten.Kilometer > 0)
  230.     {
  231.      Daten.Verbrauch = 100.*Liter/Daten.Kilometer;
  232.      sprintf(Daten.UnterGesKMstring, 
  233.              FORMAT_DM2"%s", 
  234.              Preisu/Daten.Kilometer,
  235.              TEXT(MSG_DMPERKM_SHORT_TEXT));
  236.      sprintf(Daten.TreibGesKMstring, 
  237.              FORMAT_DM2"%s", 
  238.              Preist/Daten.Kilometer,
  239.              TEXT(MSG_DMPERKM_SHORT_TEXT));
  240.      sprintf(Daten.Verbrauchstring, 
  241.              FORMAT_LITER2"%s", 
  242.              Daten.Verbrauch,
  243.              TEXT(MSG_LPERKM_SHORT_TEXT));
  244.      sprintf(Daten.GesKMstring, 
  245.              FORMAT_DM2"%s", 
  246.              (Preist+Preisu)/Daten.Kilometer,
  247.              TEXT(MSG_DMPERKM_SHORT_TEXT));
  248.     }
  249.    else
  250.     {
  251.      strcpy(Daten.UnterGesKMstring, "--------");
  252.      strcpy(Daten.TreibGesKMstring, "--------");
  253.      strcpy(Daten.Verbrauchstring , "--------");
  254.      strcpy(Daten.GesKMstring     , "--------");
  255.     }
  256.    
  257.    
  258.    set(TX_Gad3, MUIA_Text_Contents, &Daten.UnterGesstring);
  259.    set(TX_Gad4, MUIA_Text_Contents, &Daten.UnterGesKMstring);
  260.    set(TX_Gad5, MUIA_Text_Contents, &Daten.TreibGesstring);
  261.    set(TX_Gad6, MUIA_Text_Contents, &Daten.TreibGesKMstring);
  262.    set(TX_Gad7, MUIA_Text_Contents, &Daten.Gesstring);
  263.    set(TX_Gad8, MUIA_Text_Contents, &Daten.GesKMstring);
  264.    set(TX_Gad9, MUIA_Text_Contents, &Daten.kmstring);
  265.    set(TX_Gad10, MUIA_Text_Contents, &Daten.Literstring);
  266.    set(TX_Gad11, MUIA_Text_Contents, &Daten.Verbrauchstring);
  267.    
  268.    sprintf(TitelString1, 
  269.            TEXT(MSG_DATA_FOR_CAR_TEXT),
  270.            Start_Kennzeichen);
  271.    sprintf(TitelString2,
  272.            TEXT(MSG_DATA_FOR_TIME_TEXT), 
  273.            Daten.SDatum,
  274.            Daten.EDatum,
  275.            FilePart(FileName));
  276.    set(TX_Gad1, MUIA_Text_Contents, &TitelString1);
  277.    set(TX_Gad2, MUIA_Text_Contents, &TitelString2);
  278.    DoMethod(LI_Treib,MUIM_List_Redraw,MUIV_List_Redraw_All);
  279.    
  280.    return(flag);
  281.   }
  282.  
  283.  
  284.  
  285.  
  286.  
  287. /*************************************************************************
  288.  *************************************************************************
  289.  *************************************************************************
  290.  
  291. Function: FillTreib()
  292.  Fills the string entries of fuel list with the correct values.
  293.  
  294. Return: VOID
  295.  
  296. Author: Rüdiger Dreier
  297.  
  298. History:
  299.  01.01.1993: Inital version
  300.  
  301.  *************************************************************************
  302.  *************************************************************************
  303.  *************************************************************************/
  304.  
  305.  VOID FillTreib(struct NodeTreib *nt)
  306.   {
  307.    sprintf(nt->kmstring,FORMAT_KILOMETER"%s",
  308.            nt->kmStand,
  309.            TEXT(MSG_KILOMETER_SHORT_TEXT));
  310.    sprintf(nt->deltakmstring,FORMAT_DKILOMETER"%s", 
  311.            nt->deltakm, 
  312.            TEXT(MSG_KILOMETER_SHORT_TEXT));
  313.    sprintf(nt->Verbrauchstring,FORMAT_VERBRAUCH"%s",
  314.            nt->Verbrauch,
  315.            TEXT(MSG_LPERKM_SHORT_TEXT));
  316.    sprintf(nt->Literstring,FORMAT_LITER"%s",
  317.            nt->Liter,
  318.            TEXT(MSG_LITER_SHORT_TEXT));
  319.    sprintf(nt->Preisstring,FORMAT_PREIS"%s",
  320.            nt->Preis,
  321.            TEXT(MSG_MONEY_SHORT_TEXT));
  322.    
  323.    ConvertToString(nt->Days, nt->Datum);
  324.   }
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331. /*************************************************************************
  332.  *************************************************************************
  333.  *************************************************************************
  334.  
  335. Function: FillUnter()
  336.  Fills the string entries of support list with the correct values.
  337.  
  338. Return: VOID
  339.  
  340. Author: Rüdiger Dreier
  341.  
  342. History:
  343.  01.10.1993: Initial version
  344.  
  345.  *************************************************************************
  346.  *************************************************************************
  347.  *************************************************************************/
  348.  
  349.  VOID FillUnter(struct NodeUnter *nt)
  350.   {
  351.    sprintf(nt->Preisstring, FORMAT_PREIS"%s", 
  352.            nt->Preis,
  353.            TEXT(MSG_MONEY_SHORT_TEXT));
  354.    ConvertToString(nt->Days, nt->Datum);
  355.   }
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363. /*************************************************************************
  364.  *************************************************************************
  365.  *************************************************************************
  366.  
  367. Function: CheckTreibList()
  368.  Checks, if there is an entry in fuel list with the same date (day).
  369.  
  370. Return: 
  371.  1: No such entry
  372.  0: There is such an entry
  373.  
  374. Author: Rüdiger Dreier
  375.  
  376. History:
  377.  01.10.1993: Initial version
  378.  
  379.  *************************************************************************
  380.  *************************************************************************
  381.  *************************************************************************/
  382.  
  383.  LONG CheckTreibList(LONG day)
  384.   {
  385.    LONG i;
  386.    LONG flag = TRUE;
  387.    struct NodeTreib *nt;
  388.    
  389.    get(LI_Treib, MUIA_List_Entries, &i);
  390.    i--;
  391.    
  392.    while(i >= 0)
  393.     {
  394.      DoMethod(LI_Treib, MUIM_List_GetEntry, i, &nt);
  395.      if(nt->Days == day) 
  396.       {
  397.        flag = FALSE;
  398.        break;
  399.       }
  400.      if(nt->Days < day) break;
  401.      i--;
  402.     }
  403.    //   printf("CheckTreib : %ld\n",flag);
  404.    return(flag);
  405.   }
  406.