home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #3
/
amigamamagazinepolishissue1998.iso
/
bazy
/
carcosts
/
source
/
liste.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-11-02
|
11KB
|
406 lines
#include "demo.h"
#include "Daten.h"
struct DateTime theday;
/*************************************************************************
*************************************************************************
*************************************************************************
Function: ConvertToDays()
Converts a string into days (since 1.1.78, I think).
First tries Start_Format as format and if that does not work, it
checks every possible format.
Return:
-1: No valid date
>0: Number of days
Author: Rüdiger Dreier
History:
04.04.1992: Initial version
10.10.1993: No checks every possible format.
11.10.1993: Start_Format as first check added (otherwise there are problems
with the two formats dd.mm.yy and mm.dd.yy ...)
*************************************************************************
*************************************************************************
*************************************************************************/
LONG ConvertToDays(char *date)
{
LONG result;
LONG Days, i;
if(!date) return(-1);
if(date[strlen(date)-1] == ' ') date[strlen(date)-1] = 0;
theday.dat_Format = Start_Format;
theday.dat_StrDate = date;
if(date[0] == 0) return(-1); /* Leerer String = FEHLER */
/* Zunächst mit gewähltem Format probieren */
/* Falls nicht erkannt, alle Format probieren */
result = StrToDate(&theday);
if(!result)
{
for(i=0;i<=4;i++)
{
theday.dat_Format = i;
result = StrToDate(&theday);
if(result) break;
}
}
if(result == 0) return(-1);
Days = theday.dat_Stamp.ds_Days;
/* Days wieder in String wandeln */
ConvertToString(Days, date);
return(Days);
}
/*************************************************************************
*************************************************************************
*************************************************************************
Function: ConvertToString()
Converts an integer (number of days since 1.1.78) to a string.
Start_Format is used as format.
Return: VOID
Author: Rüdiger Dreier
History:
07.09.1992: Initial version
*************************************************************************
*************************************************************************
*************************************************************************/
VOID ConvertToString(LONG Days, char *Ziel)
{
LONG result;
char Buffer[20];
theday.dat_Stamp.ds_Days = Days;
theday.dat_Format = Start_Format ;
theday.dat_StrDate = Buffer;
/* Datum ins Einheitsformat wandeln */
result = DateToStr(&theday);
if(Buffer[strlen(Buffer)-1] == ' ') Buffer[strlen(Buffer)-1] = 0;
if(result != 0) strcpy(Ziel,Buffer);
}
/*************************************************************************
*************************************************************************
*************************************************************************
Function: ReCalcTreib()
Recalculates every entries in the fuel list. Some global datas (kilometer
etc.) are updated, too.
Return:
FALSE: No errors
>0: date (days since 1.1.78) of entry with negative delta kilometer
Author: Rüdiger Dreier
History:
01.10.1993: Initial version
*************************************************************************
*************************************************************************
*************************************************************************/
LONG ReCalcTreib(VOID)
{
struct NodeTreib *nt;
struct NodeUnter *nu;
LONG maxt, maxu, i;
LONG lastkm = Start_KM;
DOUBLE Liter = 0., Preist = 0., Preisu = 0.;
LONG flag = FALSE;
get(LI_Treib, MUIA_List_Entries, &maxt);
get(LI_Unter, MUIA_List_Entries, &maxu);
DoMethod(LI_Treib, MUIM_List_GetEntry, maxt-1, &nt);
DoMethod(LI_Unter, MUIM_List_GetEntry, maxu-1, &nu);
strcpy(Daten.SDatum,"---------");
strcpy(Daten.EDatum,"---------");
Daten.Kilometer = 0;
for(i=0;i<maxt;i++)
{
DoMethod(LI_Treib, MUIM_List_GetEntry, i, &nt);
nt->deltakm = nt->kmStand-lastkm;
lastkm = nt->kmStand;
if(nt->deltakm <= 0) flag = nt->Days;
if(nt->deltakm != 0.)
{
nt->Verbrauch = 100.*nt->Liter/(nt->deltakm);
}
else
{
nt->Verbrauch = 0.;
}
Liter += nt->Liter;
Preist += nt->Preis;
FillTreib(nt);
}
if(nt)
{
Daten.Kilometer = nt->kmStand - Start_KM;
if(nu)
{
if(nu->Days > nt->Days)
{
strcpy(Daten.EDatum, nu->Datum);
}
else
{
strcpy(Daten.EDatum, nt->Datum);
}
}
else
{
strcpy(Daten.EDatum, nt->Datum);
}
}
if(Start_Day != 0) strcpy(Daten.SDatum, Start_Datum);
for(i=0;i<maxu;i++)
{
DoMethod(LI_Unter, MUIM_List_GetEntry, i, &nu);
Preisu += nu->Preis;
}
Daten.TreibGes = Preist;
Daten.UnterGes = Preisu;
Daten.Liter = Liter;
sprintf(Daten.Literstring, FORMAT_LITER"%s",
Liter,
TEXT(MSG_LITER_SHORT_TEXT));
sprintf(Daten.UnterGesstring, FORMAT_DM"%s",
Preisu,
TEXT(MSG_MONEY_SHORT_TEXT));
sprintf(Daten.TreibGesstring, FORMAT_DM"%s",
Preist,
TEXT(MSG_MONEY_SHORT_TEXT));
sprintf(Daten.Gesstring, FORMAT_DM"%s",
Preist+Preisu,
TEXT(MSG_MONEY_SHORT_TEXT));
sprintf(Daten.kmstring, FORMAT_KILOMETER"%s",
Daten.Kilometer,
TEXT(MSG_KILOMETER_SHORT_TEXT));
if(Daten.Kilometer > 0)
{
Daten.Verbrauch = 100.*Liter/Daten.Kilometer;
sprintf(Daten.UnterGesKMstring,
FORMAT_DM2"%s",
Preisu/Daten.Kilometer,
TEXT(MSG_DMPERKM_SHORT_TEXT));
sprintf(Daten.TreibGesKMstring,
FORMAT_DM2"%s",
Preist/Daten.Kilometer,
TEXT(MSG_DMPERKM_SHORT_TEXT));
sprintf(Daten.Verbrauchstring,
FORMAT_LITER2"%s",
Daten.Verbrauch,
TEXT(MSG_LPERKM_SHORT_TEXT));
sprintf(Daten.GesKMstring,
FORMAT_DM2"%s",
(Preist+Preisu)/Daten.Kilometer,
TEXT(MSG_DMPERKM_SHORT_TEXT));
}
else
{
strcpy(Daten.UnterGesKMstring, "--------");
strcpy(Daten.TreibGesKMstring, "--------");
strcpy(Daten.Verbrauchstring , "--------");
strcpy(Daten.GesKMstring , "--------");
}
set(TX_Gad3, MUIA_Text_Contents, &Daten.UnterGesstring);
set(TX_Gad4, MUIA_Text_Contents, &Daten.UnterGesKMstring);
set(TX_Gad5, MUIA_Text_Contents, &Daten.TreibGesstring);
set(TX_Gad6, MUIA_Text_Contents, &Daten.TreibGesKMstring);
set(TX_Gad7, MUIA_Text_Contents, &Daten.Gesstring);
set(TX_Gad8, MUIA_Text_Contents, &Daten.GesKMstring);
set(TX_Gad9, MUIA_Text_Contents, &Daten.kmstring);
set(TX_Gad10, MUIA_Text_Contents, &Daten.Literstring);
set(TX_Gad11, MUIA_Text_Contents, &Daten.Verbrauchstring);
sprintf(TitelString1,
TEXT(MSG_DATA_FOR_CAR_TEXT),
Start_Kennzeichen);
sprintf(TitelString2,
TEXT(MSG_DATA_FOR_TIME_TEXT),
Daten.SDatum,
Daten.EDatum,
FilePart(FileName));
set(TX_Gad1, MUIA_Text_Contents, &TitelString1);
set(TX_Gad2, MUIA_Text_Contents, &TitelString2);
DoMethod(LI_Treib,MUIM_List_Redraw,MUIV_List_Redraw_All);
return(flag);
}
/*************************************************************************
*************************************************************************
*************************************************************************
Function: FillTreib()
Fills the string entries of fuel list with the correct values.
Return: VOID
Author: Rüdiger Dreier
History:
01.01.1993: Inital version
*************************************************************************
*************************************************************************
*************************************************************************/
VOID FillTreib(struct NodeTreib *nt)
{
sprintf(nt->kmstring,FORMAT_KILOMETER"%s",
nt->kmStand,
TEXT(MSG_KILOMETER_SHORT_TEXT));
sprintf(nt->deltakmstring,FORMAT_DKILOMETER"%s",
nt->deltakm,
TEXT(MSG_KILOMETER_SHORT_TEXT));
sprintf(nt->Verbrauchstring,FORMAT_VERBRAUCH"%s",
nt->Verbrauch,
TEXT(MSG_LPERKM_SHORT_TEXT));
sprintf(nt->Literstring,FORMAT_LITER"%s",
nt->Liter,
TEXT(MSG_LITER_SHORT_TEXT));
sprintf(nt->Preisstring,FORMAT_PREIS"%s",
nt->Preis,
TEXT(MSG_MONEY_SHORT_TEXT));
ConvertToString(nt->Days, nt->Datum);
}
/*************************************************************************
*************************************************************************
*************************************************************************
Function: FillUnter()
Fills the string entries of support list with the correct values.
Return: VOID
Author: Rüdiger Dreier
History:
01.10.1993: Initial version
*************************************************************************
*************************************************************************
*************************************************************************/
VOID FillUnter(struct NodeUnter *nt)
{
sprintf(nt->Preisstring, FORMAT_PREIS"%s",
nt->Preis,
TEXT(MSG_MONEY_SHORT_TEXT));
ConvertToString(nt->Days, nt->Datum);
}
/*************************************************************************
*************************************************************************
*************************************************************************
Function: CheckTreibList()
Checks, if there is an entry in fuel list with the same date (day).
Return:
1: No such entry
0: There is such an entry
Author: Rüdiger Dreier
History:
01.10.1993: Initial version
*************************************************************************
*************************************************************************
*************************************************************************/
LONG CheckTreibList(LONG day)
{
LONG i;
LONG flag = TRUE;
struct NodeTreib *nt;
get(LI_Treib, MUIA_List_Entries, &i);
i--;
while(i >= 0)
{
DoMethod(LI_Treib, MUIM_List_GetEntry, i, &nt);
if(nt->Days == day)
{
flag = FALSE;
break;
}
if(nt->Days < day) break;
i--;
}
// printf("CheckTreib : %ld\n",flag);
return(flag);
}