#include "demo.h"
#include "Daten.h"
 
 LONG __saveds __asm getfuelnumber(register __a0 struct Hook *hook,
                                   register __a2 struct Object *obj,
                                   register __a1 LONG *a);
 struct Hook getfuelnumberhook = 
  {
    {
     NULL,NULL 
    }
   ,(VOID *)getfuelnumber,NULL,NULL 
  };
 LONG __saveds __asm getfuelnumber(register __a0 struct Hook *hook,
                                   register __a2 struct Object *obj,
                                   register __a1 LONG *a)
  {
   LONG max;
   char buffer[30];
   
   get(LI_Treib, MUIA_List_Entries, &max);
   sprintf(buffer, "%ld", max);
   
   set(obj, MUIA_Application_RexxString, buffer);
   return(0);
  }
 
 
 
 
 
 
 
 
 
 
 LONG __saveds __asm getfuelinfo(register __a0 struct Hook *hook,
                                 register __a2 struct Object *obj,
                                 register __a1 LONG *(a[]));
 struct Hook getfuelinfohook = 
  {
    {
     NULL,NULL 
    }
   ,(VOID *)getfuelinfo,NULL,NULL 
  };
 LONG __saveds __asm getfuelinfo(register __a0 struct Hook *hook,
                                 register __a2 struct Object *obj,
                                 register __a1 LONG *(a[]))
  {
   LONG max, c;
   struct NodeTreib *nt;
   char buffer[30];
   char *b;
   
   c = *(LONG *)a[1];
   b = (char *)a[0];
   
   get(LI_Treib, MUIA_List_Entries, &max);
   
   if(c < max && c >= 0)
    {
     
     DoMethod(LI_Treib, MUIM_List_GetEntry, c, &nt);
     
     
     if(!strcmp(b,"DATE"))
      {
       ConvertToString(nt->Days, buffer);
      }
     else
      {
       if(!strcmp(b,"KM"))
        {
         sprintf(buffer, FORMAT_KILOMETER, nt->kmStand);
        }
       else
        {
         if(!strcmp(b,"LITER"))
          {
           sprintf(buffer, FORMAT_LITER, nt->Liter);
          }
         else
          {
           if(!strcmp(b,"PRICE"))
            {
             sprintf(buffer, FORMAT_PREIS, nt->Preis);
            }
           else
            {
             if(!strcmp(b,"DKM"))
              {
               sprintf(buffer, FORMAT_DKILOMETER, nt->deltakm);
              }
             else
              {
               if(!strcmp(b,"LPERKM"))
                {
                 sprintf(buffer, FORMAT_VERBRAUCH, nt->Verbrauch);
                }
               else
                {
                 return(10);
                }
              }
            }
          }
        }
      }
     
     
     
     set(obj, MUIA_Application_RexxString, buffer);
     return(0);
    }
   else
    {
     return(10);
    }
  }
 
 
 LONG __saveds __asm getsuppnumber(register __a0 struct Hook *hook,
                                   register __a2 struct Object *obj,
                                   register __a1 LONG *a);
 struct Hook getsuppnumberhook = 
  {
    {
     NULL,NULL 
    }
   ,(VOID *)getsuppnumber,NULL,NULL 
  };
 LONG __saveds __asm getsuppnumber(register __a0 struct Hook *hook,
                                   register __a2 struct Object *obj,
                                   register __a1 LONG *a)
  {
   LONG max;
   char buffer[30];
   
   get(LI_Unter, MUIA_List_Entries, &max);
   sprintf(buffer, "%ld", max);
   
   set(obj, MUIA_Application_RexxString, buffer);
   return(0);
  }
 
 
 
 
 
 
 
 
 
 
 LONG __saveds __asm getsuppinfo(register __a0 struct Hook *hook,
                                 register __a2 struct Object *obj,
                                 register __a1 LONG *(a[]));
 struct Hook getsuppinfohook = 
  {
    {
     NULL,NULL 
    }
   ,(VOID *)getsuppinfo,NULL,NULL 
  };
 LONG __saveds __asm getsuppinfo(register __a0 struct Hook *hook,
                                 register __a2 struct Object *obj,
                                 register __a1 LONG *(a[]))
  {
   LONG max, c;
   struct NodeUnter *nu;
   char buffer[3*MAXTEXTSTRING+1];
   char *b;
   
   c = *(LONG *)a[1];
   b = (char *)a[0];
   
   get(LI_Unter, MUIA_List_Entries, &max);
   
   if(c < max && c >= 0)
    {
     
     DoMethod(LI_Unter, MUIM_List_GetEntry, c, &nu);
     
     
     if(!strcmp(b,"DATE"))
      {
       ConvertToString(nu->Days, buffer);
      }
     else
      {
       if(!strcmp(b,"TITLE"))
        {
         strcpy(buffer, nu->Titelstring);
        }
       else
        {
         if(!strcmp(b,"REMARK"))
          {
           strcpy(buffer, nu->Bemerkungstring);
          }
         else
          {
           if(!strcmp(b,"PRICE"))
            {
             sprintf(buffer, FORMAT_DM, nu->Preis);
            }
           else
            {
             return(10);
            }
          }
        }
      }
     
     set(obj, MUIA_Application_RexxString, buffer);
     return(0);
    }
   else
    {
     return(10);
    }
  }
 
 
 
 
 LONG __saveds __asm getsummary(register __a0 struct Hook *hook,
                                register __a2 struct Object *obj,
                                register __a1 LONG *(a[]));
 struct Hook getsummaryhook = 
  {
    {
     NULL,NULL 
    }
   ,(VOID *)getsummary,NULL,NULL 
  };
 LONG __saveds __asm getsummary(register __a0 struct Hook *hook,
                                register __a2 struct Object *obj,
                                register __a1 LONG *(a[]))
  {
   char buffer[MAXTEXTSTRING];
   char *b;
   
   
   b = (char *)a[0];
   
   if(!strcmp(b,"STARTDATE"))
    {
     strcpy(buffer, Daten.SDatum);
    }
   else
    {
     if(!strcmp(b,"ENDDATE"))
      {
       strcpy(buffer, Daten.EDatum);
      }
     else
      {
       if(!strcmp(b,"LITER"))
        {
         sprintf(buffer, FORMAT_LITER, Daten.Liter);
        }
       else
        {
         if(!strcmp(b,"KM"))
          {
           sprintf(buffer, FORMAT_KILOMETER, Daten.Kilometer);
          }
         else
          {
           if(!strcmp(b,"CONSUMPTION"))
            {
             sprintf(buffer, FORMAT_VERBRAUCH, Daten.Verbrauch);
            }
           else
            {
             if(!strcmp(b,"PRICEFUEL"))
              {
               sprintf(buffer, FORMAT_DM, Daten.TreibGes);
              }
             else
              {
               if(!strcmp(b,"PRICESUPPORT"))
                {
                 sprintf(buffer, FORMAT_DM, Daten.UnterGes);
                }
               else
                {
                 if(!strcmp(b, "SIGN"))
                  {
                   strcpy(buffer, Start_Kennzeichen);
                  }
                 else
                  {
                   if(!strcmp(b, "KMSTART"))
                    {
                     sprintf(buffer, FORMAT_KILOMETER, Start_KM);
                    }
                   else
                    {
                     return(10);
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
   set(obj, MUIA_Application_RexxString, buffer);
   return(0);
  }
 
 
 
 
 LONG __saveds __asm setfuelentry(register __a0 struct Hook *hook,
                                  register __a2 struct Object *obj,
                                  register __a1 LONG *(a[]));
 struct Hook setfuelentryhook = 
  {
    {
     NULL,NULL 
    }
   ,(VOID *)setfuelentry,NULL,NULL 
  };
 LONG __saveds __asm setfuelentry(register __a0 struct Hook *hook,
                                  register __a2 struct Object *obj,
                                  register __a1 LONG *(a[]))
  {
   char buffer[MAXTEXTSTRING];
   char *date, *km, *liter, *price;
   LONG days, ret=0;
   struct NodeTreib nt, *n=&nt;
   BOOL update;
   
   
   date  = (char *)a[0];
   km    = (char *)a[1];
   liter = (char *)a[2];
   price = (char *)a[3];
   update= (BOOL)  a[4];
   
   
   strcpy(buffer, date);
   /* Datum testen */
   days = ConvertToDays(buffer);
   if(days == -1) return(10); /* Datum nicht korrekt !!! */
   
   strcpy(nt.Datum, buffer);
   nt.Days = days;
   
   sscanf(km   , "%ld", &nt.kmStand);
   sscanf(liter, "%lf", &nt.Liter);
   sscanf(price, "%lf", &nt.Preis);
   
   FillTreib(&nt);
   
   DoMethod(LI_Treib, MUIM_List_Insert, 
            &n, 1, MUIV_List_Insert_Sorted);
   
   
   /* Es wäre schön, das Datum, das zu einer negativen Distanz gehört, */
   /* zurückgeben zu können. Dies scheint aber nicht möglich. Wenn ret */
   /* ungleich 0 ist, wird kein String zurückgegeben.                  */
   
   if(update)
    {
     if(days = ReCalcTreib())
      {
     /* Negative Distanz */
       ret = 5;
      }
    }
   changes = TRUE;
   return(ret);
  }
 
 
 
 
 
 
 LONG __saveds __asm setsupportentry(register __a0 struct Hook *hook,
                                     register __a2 struct Object *obj,
                                     register __a1 LONG *(a[]));
 struct Hook setsupportentryhook = 
  {
    {
     NULL,NULL 
    }
   ,(VOID *)setsupportentry,NULL,NULL 
  };
 LONG __saveds __asm setsupportentry(register __a0 struct Hook *hook,
                                     register __a2 struct Object *obj,
                                     register __a1 LONG *(a[]))
  {
   char buffer[MAXTEXTSTRING+1];
   char *date, *title, *remark, *price;
   LONG days;
   struct NodeUnter nu, *n=&nu;
   BOOL update;
   
   
   date   = (char *)a[0];
   title  = (char *)a[1];
   remark = (char *)a[2];
   price  = (char *)a[3];
   update = (BOOL)  a[4];
   
   strcpy(buffer, date);
   /* Datum testen */
   days = ConvertToDays(buffer);
   if(days == -1) return(10); /* Datum nicht korrekt !!! */
   
   strcpy(nu.Datum, buffer);
   nu.Days = days;
   
   sscanf(price,"%lf",&nu.Preis);
   sprintf(nu.Titelstring, FORMAT_TITEL, title);
   sprintf(nu.Bemerkungstring, FORMAT_BEMERKUNG, remark);
   
   strcpy(buffer, nu.Titelstring);
   buffer[MAX_TITEL] = 0;
   strcpy(nu.DispTitel, buffer);
   
   strcpy(buffer, nu.Bemerkungstring);
   buffer[MAX_REM] = 0;
   strcpy(nu.DispRem, buffer);
   
   FillUnter(&nu);
   
   DoMethod(LI_Unter, MUIM_List_Insert, 
            &n, 1, MUIV_List_Insert_Sorted);
   
   if(update)
    {
     ReCalcTreib(); /* Damit die aktuellen Werte angezeigt werden */
    }
   changes = TRUE;
   
   return(0);
  }
  
  
  
  
  
 
 LONG __saveds __asm setstart(register __a0 struct Hook *hook,
                              register __a2 struct Object *obj,
                              register __a1 LONG *(a[]));
 struct Hook setstarthook = 
  {
    {
     NULL,NULL 
    }
   ,(VOID *)setstart,NULL,NULL 
  };
 LONG __saveds __asm setstart(register __a0 struct Hook *hook,
                              register __a2 struct Object *obj,
                              register __a1 LONG *(a[]))
  {
   char buffer[50];
   char * date, * car;
   long * startkm, * datef, days;
   BOOL ok;
   
   ok = TRUE;
   
   if(changes)
    {
     if(!MUI_Request(App, WI_Cost, 0, NULL, 
                     TEXT(MSG_CLEAR_CONT_REQ),
                     TEXT(MSG_NOTSAVED_NEW_REQ),
                     TAG_END))
      {
       ok = FALSE;
       ;
      }
    }
   
   if(ok) 
    {
     date   = (char *)a[0];
     car    = (char *)a[1];
     startkm= (long *)a[2];
     datef  = (long *)a[3];
     
     strcpy(buffer, date);
   /* Datum testen */
     days = ConvertToDays(buffer);
     if(days == -1) return(10); /* Datum nicht korrekt !!! */
     
     strcpy(Start_Datum, buffer);
     Start_Day = days;
     
     Start_Format = *datef;
     if(Start_Format < 0 || Start_Format > 4) Start_Format = 0;
     
     Start_KM     = *startkm;
     strcpy(Start_Kennzeichen, car);
     
     RemoveAll();
     changes     = FALSE;
     FileName[0] = 0;
     ReCalcTreib();
    }
   if(ok) return(0);
   else   return(5);
  }

 LONG __saveds __asm datetoint(register __a0 struct Hook *hook,
                               register __a2 struct Object *obj,
                               register __a1 LONG *(a[]));
 struct Hook datetointhook = 
  {
    {
     NULL,NULL 
    }
   ,(VOID *)datetoint,NULL,NULL 
  };
 LONG __saveds __asm datetoint(register __a0 struct Hook *hook,
                               register __a2 struct Object *obj,
                               register __a1 LONG *(a[]))
  {
   char buffer[50];
   char * date;
   long days;
   BOOL ok;
   
   ok = TRUE;
  
   if(ok) 
    {
     date   = (char *)a[0];
     
     strcpy(buffer, date);
     /* Datum testen */
     days = ConvertToDays(buffer);
     if(days == -1) return(10); /* Datum nicht korrekt !!! */
     sprintf(buffer, "%ld", days);
   
     set(obj, MUIA_Application_RexxString, buffer);
     }
   if(ok) return(0);
   else   return(5);
  }

 
 
 struct MUI_Command commands[] =
  {
    {
     "getfuelnumber", NULL, 0, &getfuelnumberhook     
    }
   ,
    {
     "getfuelinfo", "ITEM/A,NUMBER/N/A"   , 2        , &getfuelinfohook 
    }
   ,
    {
     "getsuppnumber", NULL, 0, &getsuppnumberhook     
    }
   ,
    {
     "getsuppinfo", "ITEM/A,NUMBER/N/A"   , 2        , &getsuppinfohook 
    }
   ,
    {
     "getsummary", "ITEM/A"   , 1        , &getsummaryhook 
    }
   ,
    {
     "setfuelentry", "DATE/A,KM/A,LITER/A,PRICE/A,UPDATE/S"   , 5        , &setfuelentryhook 
    }
   ,
    {
     "setsupportentry", "DATE/A,TITLE/A,REMARK/A,PRICE/A,UPDATE/S"   , 5        , &setsupportentryhook 
    }
   ,
    {
     "setstart", "DATE/A,CAR/A,STARTKM/N/A,DATEFORMAT/N/A"   , 4       
     , &setstarthook
    }
   ,
    {
     "datetoint", "DATE/A"   , 1       
     , &datetointhook
    }
   ,
    {
     NULL    , NULL          , NULL     , NULL     
    }
  };
 
 
 
