#include "demo.h"
#include "Daten.h" 
#include <exec/memory.h>
 
 BOOL datelistopen = FALSE;
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: DisableTreibGads()
 Disables the most buttons of the fuel window, enables cancel button.

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID DisableTreibGads(VOID)
  {
   set(BT_TR_New   , MUIA_Disabled, TRUE);
   set(BT_TR_Change, MUIA_Disabled, TRUE);
   set(BT_TR_Delete, MUIA_Disabled, TRUE);
   set(BT_TR_Cancel, MUIA_Disabled, FALSE);
   set(BT_TR_Close , MUIA_Disabled, TRUE);
   set(LV_Treib    , MUIA_Disabled, TRUE);
  }
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: EnableTreibGads()
 Enables the most buttons of fuel window, disables cancel button

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID EnableTreibGads(VOID)
  {
   set(BT_TR_New   , MUIA_Disabled, FALSE);
   set(BT_TR_Change, MUIA_Disabled, FALSE);
   set(BT_TR_Delete, MUIA_Disabled, FALSE);
   set(BT_TR_Cancel, MUIA_Disabled, TRUE);
   set(BT_TR_Close , MUIA_Disabled, FALSE);
   set(LV_Treib    , MUIA_Disabled, FALSE);
  }
 
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: ClearTreib()
 Clears the stringgadget of fuel window

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID ClearTreib(VOID)
  {
   set(ST_Gad1, MUIA_String_Contents, "");
   set(ST_Gad2, MUIA_String_Contents, "");
   set(ST_Gad3, MUIA_String_Contents, "");
   set(ST_Gad4, MUIA_String_Contents, "");
  }
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: EnableTreib()
 Enables the stringgadgets in fuel window

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID EnableTreib(VOID)
  {
   set(ST_Gad1, MUIA_Disabled, FALSE);
   set(ST_Gad2, MUIA_Disabled, FALSE);
   set(ST_Gad3, MUIA_Disabled, FALSE);
   set(ST_Gad4, MUIA_Disabled, FALSE);
  }
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: DisableTreib()
 Disables the stringgadgets in fuel window.

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID DisableTreib(VOID)
  {
   set(ST_Gad1, MUIA_Disabled, TRUE);
   set(ST_Gad2, MUIA_Disabled, TRUE);
   set(ST_Gad3, MUIA_Disabled, TRUE);
   set(ST_Gad4, MUIA_Disabled, TRUE);
   
  }
 
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: DisableUnterGads()
 Disables most of the buttons in support window, enables the cancel button.

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID DisableUnterGads(VOID)
  {
   set(BT_UN_New   , MUIA_Disabled, TRUE);
   set(BT_UN_Change, MUIA_Disabled, TRUE);
   set(BT_UN_Delete, MUIA_Disabled, TRUE);
   set(BT_UN_Cancel, MUIA_Disabled, FALSE);
   set(BT_UN_Close , MUIA_Disabled, TRUE);
   set(LV_Unter    , MUIA_Disabled, TRUE);
  }
 
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: EnableUnterGads()
 Enables most of the buttons in support window, disables the cancel button

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID EnableUnterGads(VOID)
  {
   set(BT_UN_New   , MUIA_Disabled, FALSE);
   set(BT_UN_Change, MUIA_Disabled, FALSE);
   set(BT_UN_Delete, MUIA_Disabled, FALSE);
   set(BT_UN_Cancel, MUIA_Disabled, TRUE);
   set(BT_UN_Close , MUIA_Disabled, FALSE);
   set(LV_Unter    , MUIA_Disabled, FALSE);
  }
 
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: ClearDisableUnter()
 Clears the stringgadgets in support window, calls DisableUnter()

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID ClearDisableUnter(VOID)
  {
   DisableUnter();
   set(ST_Gad5, MUIA_String_Contents, "");
   set(ST_Gad6, MUIA_String_Contents, "");
   set(ST_Gad7, MUIA_String_Contents, "");
   set(ST_Gad8, MUIA_String_Contents, "");
   
  }
 
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: EnableUnter()
 Enables the stringgadget in support window.

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID EnableUnter(VOID)
  {
   set(ST_Gad5, MUIA_Disabled, FALSE);
   set(ST_Gad6, MUIA_Disabled, FALSE);
   set(ST_Gad7, MUIA_Disabled, FALSE);
   set(ST_Gad8, MUIA_Disabled, FALSE);
  }
 
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: DisableUnter()
 Disables the stringgadget in support window.

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID DisableUnter(VOID)
  {
   set(ST_Gad5, MUIA_Disabled, TRUE);
   set(ST_Gad6, MUIA_Disabled, TRUE);
   set(ST_Gad7, MUIA_Disabled, TRUE);
   set(ST_Gad8, MUIA_Disabled, TRUE);
  }
 
 /* Flag, gibt an, ob Änderungsmodus eingeschaltet wurde */
 BOOL changetreib, changeunter;
 LONG changeactivetreib, changeactiveunter;
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: Loop()
 Main loop of the program.

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID Loop(VOID)
  {
   BOOL running = TRUE;
   ULONG signal;
   
   while (running)
    {
     switch (DoMethod(App,MUIM_Application_Input,&signal))
      {
       case MUIV_Application_ReturnID_Quit:
        {
         if(changes)
          {
           running = !MUI_Request(App, WI_Cost, 0, NULL, 
                                  TEXT(MSG_QUIT_CONT_REQ),
                                  TEXT(MSG_NOTSAVED_QUIT_REQ),
                                  TAG_END);
          }
         else
          {
           running = FALSE;
          }
         
         break;
        }
       case ID_LOAD:
        {
         if(changes)
          {
           if(!MUI_Request(App, WI_Cost, 0, NULL, 
                           TEXT(MSG_LOAD_CANCEL),
                           TEXT(MSG_NOTSAVED_LOAD_REQ),
                           TAG_END))
            {
             break;
            }
          }
         if(GetFileName5(Rq,
                         TEXT(MSG_LOADFILE_REQ),
                         FileName,
                         TEXT(MSG_PATTERN_REQ),
                         LOADFILE,
                         150))
          {
           RemoveAll();
           InsertAll(FileName);
           changes = FALSE;
          }
         break;
        }
       case ID_INSERT:
        {
         if(GetFileName5(Rq,
                         TEXT(MSG_INSERTFILE_REQ),
                         FileName,
                         TEXT(MSG_PATTERN_REQ),
                         LOADFILE,
                         150))
          {
           InsertAll(FileName);
           changes = TRUE;
          }
         break;
        }
       case ID_SAVEAS:
        {
         if(GetFileName5(Rq,
                         TEXT(MSG_SAVEFILE_REQ),
                         FileName,
                         TEXT(MSG_PATTERN_REQ),
                         SAVEFILE,
                         150))
          {
           SaveAll(FileName);
           WriteMyIcon(FileName, TEXT(MSG_DEFAULTTOOL_ICON));
           changes = FALSE;
          }
         break;
        }
       case ID_SAVE:
        {
         if(FileName[0])          
          {
           SaveAll(FileName);
           changes = FALSE;
          }
         else
          {
           if(GetFileName5(Rq,
                           TEXT(MSG_SAVEFILE_REQ),
                           FileName,
                           TEXT(MSG_PATTERN_REQ),
                           SAVEFILE,
                           150))
            {
             SaveAll(FileName);
             WriteMyIcon(FileName, TEXT(MSG_DEFAULTTOOL_ICON));
             changes = FALSE;
            }
          }
         break;
        }
       case ID_PRINT:
        {
         LONG result;
         result = MUI_Request(App, WI_Cost, 0, NULL, 
                              TEXT(MSG_PRINTTO_BUTTONS),
                              TEXT(MSG_PRINTTO_QUESTION),
                              0,
                              TAG_END);
         if(result)
          {
           if(result == 1)
            {
            /* Ausgabe auf den Drucker */
             strcpy(PrtName, "prt:");
             PrintAll(PrtName);
            }
           else
            {
             if(GetFileName5(Rq,
                             TEXT(MSG_SAVEFILE_REQ),
                             PrtName,
                             TEXT(MSG_PATTERN_REQ),
                             SAVEFILE,
                             150))
              {
               PrintAll(PrtName);
              }
            }
          }
         break;
        }
       case ID_MENUCHANGE:
        {
         LONG i,max;
         struct NodeUnter *nu;
         
         LoopNeu(TRUE);
         
         get(LI_Unter, MUIA_List_Entries, &max);
         for(i=0;i<max;i++)
          {
           DoMethod(LI_Unter, MUIM_List_GetEntry, i, &nu);
           ConvertToString(nu->Days, nu->Datum);
          }
         
         //ReCalcTreib();
         break;
        }
       case ID_MENUNEU:
        {
         if(changes)
          {
           if(!MUI_Request(App, WI_Cost, 0, NULL, 
                           TEXT(MSG_CLEAR_CONT_REQ),
                           TEXT(MSG_NOTSAVED_NEW_REQ),
                           TAG_END))
            {
             break;
            }
          }
         LoopNeu(FALSE);
         //ReCalcTreib();
         break;
        }
       case ID_ABOUT:
        {
         MUI_Request(App, WI_Cost, 0, NULL, 
                     TEXT(MSG_ABOUT_OK_REQ),
                     eC ePW "%s\n\n"
                     ePB "Version "VERSION " " DATE "\n"
                     "Copyright 1993/94/95/96 by Rüdiger Dreier.\n\n"
                     "Rüdiger Dreier\nGustav-Winkler-Str. 40\n"
                     "D-33699 Bielefeld, Germany\n\n"
                     "FAX: +49 521 200691\n\n"
                     "EMail: ruediger.dreier@T-Online.DE\n"
                     "\nThis is a MUI-Application.\n"
                     "MUI is copyrighted by Stefan Stuntz.",
                     TEXT(MSG_PROGNAME),
                     TAG_END);
         break;
        }
       case  ID_TREIB:
        {
         /* Treibstoffenster öffnen */
         if(Start_Day)
          {
           TreibLoop();
          }
         else
          {
           LoopNeu(FALSE);
          }
         break;
        }
       case ID_UNTER:
        {
         /* Unterhaltsfenster öffnen */
         if(Start_Day)
          {
           UnterLoop();
          }
         else
          {
           LoopNeu(FALSE);
          }
         break;
        }
      }
     if (running && signal) Wait(signal);
    }
  }
 
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: TreibLoop()
 Main loop for fuel list.
 
Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version
 
 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID TreibLoop(VOID)
  {
   BOOL running = TRUE;
   ULONG signal;
   char *string;
   LONG days;
   char datum[30];
   struct NodeTreib nt, *n=&nt;
   LONG km, day;
   
   LONG id;
   
   nt.Verbrauch = 0.;
   nt.deltakm   = 0.;
   
   if(!WI_Treib) return; /* Fehler beim Initialsieren */
   set(WI_Treib, MUIA_Window_Open, TRUE);
   set(WI_Cost , MUIA_Window_Sleep, TRUE);
   
   ClearTreib();
   DisableTreib();
   EnableTreibGads();
   
   set(BT_TR_Cancel, MUIA_Disabled, TRUE);
   set(WI_Treib, MUIA_Window_ActiveObject, LV_Treib);
    
   
   while (running)
    {
     id=DoMethod(App,MUIM_Application_Input,&signal);
     switch (id)
      {
       case MUIV_Application_ReturnID_Quit:
        {
         if(changetreib)
          {
           //ReCalcTreib();
           changetreib = FALSE;
           
           set(LV_Treib, MUIA_Disabled, FALSE);
          }
         running = FALSE;
         break;
        }
       case ID_TR_NEW:
        {
         /* Neuen Eintrag anlegen */
         ClearTreib();
         EnableTreib();
         DisableTreibGads();
         
         /* Falls CANCEL angewählt wird, darf kein Eintrag eingefügt */
         /* werden.                                                  */
         changetreib = FALSE;
         
         set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad1);
         break;
        }
       case ID_TR_DATE:
        {
         /* Datum wurde eingegeben, auf Sinn überprüfen */
         LONG days;
         char datum[30];
         
         
         get(ST_Gad1, MUIA_String_Contents, &string);
         strcpy(datum, string);
         days = ConvertToDays(datum);
         if(days != -1)
          {
           set(ST_Gad1, MUIA_String_Contents, &datum);
           set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad2);
          }
         else
          {
           DisplayBeep(0);
           set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad1);
          }
         break;
        }
       case ID_TR_PRICE:
        {
         get(ST_Gad1, MUIA_String_Contents, &string);
         strcpy(datum, string);
         days = ConvertToDays(datum);
         if(days != -1)
          {
           set(LI_Treib, MUIA_List_Quiet, TRUE);
           
           /* Falls im Modus CHANGE, erst alten Eintrag löschen... */
           if(changetreib)
            {
             DoMethod(LI_Treib, MUIM_List_Remove, changeactivetreib);
            }
           
           /* Erst testen, ob Eintrag einmalig ist */
           //if(CheckTreibList(days))
            {
             /* Alles OK, Eintrag anfertigen */
             strcpy(nt.Datum, datum);
             nt.Days = days;
             
             get(ST_Gad2, MUIA_String_Integer,  &km);
             get(ST_Gad2, MUIA_String_Contents, &string);
             //printf("2:Kilometer >%s< %ld\n",string,km);
             
             /* Aus mir unbekannten Gründen wird oben immer */
             /* eine 0 zurückgegeben...                     */
             StrToLong(string,&km);
             nt.kmStand = km;
             //printf("3:Kilometer %ld\n",km);
             
             nt.Liter = nt.Preis = 0;
             
             get(ST_Gad3, MUIA_String_Contents, &string);
             sscanf(string,"%lf",&nt.Liter);
             //printf(">%s<, %lx %lf\n",string,string,nt.Liter);
             
             get(ST_Gad4, MUIA_String_Contents, &string);
             sscanf(string,"%lf",&nt.Preis);
             //printf(">%s< %lx %lf\n",string,string,nt.Preis);
             
             FillTreib(&nt);
             
             //printf(">%s< >%s< >%s<\n",nt.Datum,nt.Literstring,nt.Preisstring);
             
             /* In Liste einfügen */
             DoMethod(LI_Treib, MUIM_List_Insert, 
                      &n, 1, MUIV_List_Insert_Sorted);
             
             if(day=ReCalcTreib())
              {
               char datum[30];
               
               ConvertToString(day, datum);
               
               MUI_Request(App, WI_Treib, 0, NULL, 
                           TEXT(MSG_ABOUT_OK_REQ),
                           TEXT(MSG_ERROR_IN_FUELLIST),
                           datum,
                           TAG_END);
               
              }
             
             ClearTreib();
             DisableTreib();
             
             EnableTreibGads();
             
             changes = TRUE;

                          }
#ifdef OLDVERSION
           else
            {
             DisplayBeep(0);
             MUI_Request(App, WI_Treib, 0, NULL, 
                         TEXT(MSG_ABOUT_OK_REQ),
                         TEXT(MSG_DOUBLE_DATE),
                         TAG_END);
             set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad1);
            }
#endif
           
           /* Letzten Eintrag = aktueller Eintrag */
           //get(LI_Treib,MUIA_List_Entries, &max);
           set(LI_Treib,MUIA_List_Quiet  , FALSE);
           
           if(changetreib)
            {
             set(LI_Treib,MUIA_List_Active , changeactivetreib);
            }
           else
            {
             set(LI_Treib,MUIA_List_Active , MUIV_List_Active_Bottom);
            }
           changetreib = FALSE;
           set(WI_Treib, MUIA_Window_ActiveObject, LV_Treib);
          }
         else
          {
           DisplayBeep(0);
           set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad1);
          }
         break;
        }
       case ID_TR_CANCEL:
        {
         EnableTreibGads();
         
#ifdef tasdtSADF
         if(changetreib)
          {
           /* Falls im Änderungsmodus, den alten */
           /* Eintrag wieder einfügen */
           
           set(LI_Treib, MUIA_List_Quiet, TRUE);
           DoMethod(LI_Treib, MUIM_List_Insert, 
                    &n, 1, MUIV_List_Insert_Sorted);
           
           if(ReCalcTreib())
            {
             set(LI_Treib, MUIA_List_Quiet, FALSE);
             
             MUI_Request(App, WI_Treib, 0, NULL, 
                         TEXT(MSG_ABOUT_OK_REQ),
                         TEXT(MSG_ERROR_IN_FUELLIST),
                         TAG_END);
            }
           else
            {
             set(LI_Treib, MUIA_List_Quiet, FALSE);
            }
           changetreib = FALSE;
          }
#endif
         
         ClearTreib();
         DisableTreib();
         set(WI_Treib, MUIA_Window_ActiveObject, LV_Treib);
         break;
        }
       case ID_TR_CHANGE:
        {
         LONG active;
         struct NodeTreib *nt;
         char buffer[30];
         
         get(LI_Treib, MUIA_List_Active, &active);
         if(active >= 0)
          {
           DisableTreibGads();
           
           DoMethod(LI_Treib, MUIM_List_GetEntry, active, &nt);
           
           //sprintf(buffer,"%ld",nt->kmStand);
           
           set(ST_Gad1,  MUIA_String_Contents, &nt->Datum);
           set(ST_Gad2,  MUIA_String_Integer , nt->kmStand);
           
           
           sprintf(buffer,FORMAT_LITER2,nt->Liter);
           set(ST_Gad3,  MUIA_String_Contents, &buffer);
           sprintf(buffer,FORMAT_PREIS2,nt->Preis);
           set(ST_Gad4,  MUIA_String_Contents, &buffer);
           
           
           //set(LI_Treib, MUIA_List_Quiet, TRUE);
           
           
           //DoMethod(LI_Treib, MUIM_List_Remove, active);
           changetreib       = TRUE;
           changeactivetreib = active;
           
           //printf("KM %ld\n",nt->kmStand);
           
           EnableTreib();
           
           set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad1);
           
           //ReCalcTreib();
           //set(LI_Treib, MUIA_List_Quiet, FALSE);
           changes = TRUE;
          }
         else
          {
           DisplayBeep(0);
          }
         
         break;
        }
       case ID_TR_ACTIVE:
        {
         LONG active;
         char buffer[30];
         struct NodeTreib *nt;
         
         get(LI_Treib, MUIA_List_Active, &active);
         if(active >= 0 && !changetreib)
          {
           DoMethod(LI_Treib, MUIM_List_GetEntry, active, &nt);
           
           set(ST_Gad1,  MUIA_String_Contents, &nt->Datum);
           set(ST_Gad2,  MUIA_String_Integer , nt->kmStand);
           
           sprintf(buffer,FORMAT_LITER2,nt->Liter);
           set(ST_Gad3,  MUIA_String_Contents, &buffer);
           sprintf(buffer,FORMAT_PREIS2,nt->Preis);
           set(ST_Gad4,  MUIA_String_Contents, &buffer);
          }
         break;
        }
       case ID_TR_DELETE:
        {
         LONG active;
         
         get(LI_Treib, MUIA_List_Active, &active);
         if(active >= 0)
          {
           set(LI_Treib, MUIA_List_Quiet, TRUE);
           DoMethod(LI_Treib, MUIM_List_Remove, active);
           if(ReCalcTreib())
            {
             MUI_Request(App, WI_Treib, 0, NULL, 
                         TEXT(MSG_ABOUT_OK_REQ),
                         TEXT(MSG_ERROR_IN_FUELLIST),
                         TAG_END);
            }
           changes = TRUE;
           set(LI_Treib, MUIA_List_Quiet, FALSE);
           set(WI_Treib, MUIA_Window_ActiveObject, LV_Treib);
          }
         else
          {
           DisplayBeep(0);
          }
         break;
        }
      }
     if(running && signal) Wait(signal);
    }
    /* Und Fenster wieder schließen */
   set(WI_Cost , MUIA_Window_Sleep, FALSE);
   set(WI_Treib, MUIA_Window_Open,  FALSE);
  }
 
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: UnterLoop()
 Main loop for support list.

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID UnterLoop(VOID)
  {
   BOOL running = TRUE;
   ULONG signal;
   char *string;
   char buffer[MAXTEXTSTRING+1];
   
   
   if(!WI_Unter) return; /* Fehler beim Initialsieren */
   set(WI_Unter, MUIA_Window_Open, TRUE);
   set(WI_Cost , MUIA_Window_Sleep, TRUE);
   
   set(BT_UN_Cancel, MUIA_Disabled, TRUE);
   
   ClearDisableUnter();
   EnableUnterGads();
   set(WI_Unter, MUIA_Window_ActiveObject, LV_Unter);
   
   while (running)
    {
     switch (DoMethod(App,MUIM_Application_Input,&signal))
      {
       case MUIV_Application_ReturnID_Quit:
        {
         if(changeunter)
          {
           //ReCalcTreib();
           changeunter = FALSE;
           set(LV_Unter, MUIA_Disabled, FALSE);
          }
         running = FALSE;
         break;
        }
       case ID_UN_NEW:
        {
         /* Neuen Eintrag anlegen */
         EnableUnter();
         DisableUnterGads();
         set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad5);
         
         changeunter = FALSE;
         
         break;
        }
       case ID_UN_DATE:
        {
         /* Datum wurde eingegeben, auf Sinn überprüfen */
         LONG days;
         char datum[30];
         
         
         get(ST_Gad5, MUIA_String_Contents, &string);
         strcpy(datum, string);
         days = ConvertToDays(datum);
         if(days != -1)
          {
           set(ST_Gad5, MUIA_String_Contents, &datum);
           set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad6);
          }
         else
          {
           DisplayBeep(0);
           set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad5);
          }
         break;
        }
       case ID_UN_PRICE:
        {
         set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad7);
         break;      
        }
       case ID_UN_TITLE:
        {
         set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad8);
         break;      
        }
       case ID_UN_REMARK:
        {
         LONG days;
         char datum[30];
         struct NodeUnter nt, *n=&nt;
         
         get(ST_Gad5, MUIA_String_Contents, &string);
         strcpy(datum, string);
         days = ConvertToDays(datum);
         if(days != -1)
          {
           set(LI_Unter, MUIA_List_Quiet, TRUE);
           
           /* Falls im Modus CHANGE, erst alten Eintrag löschen... */
           if(changeunter)
            {
             DoMethod(LI_Unter, MUIM_List_Remove, changeactiveunter);
            }
           
           /* Alles OK, Eintrag anfertigen */
           strcpy(nt.Datum, datum);
           nt.Days = days;
           
           get(ST_Gad6, MUIA_String_Contents, &string);
           sscanf(string,"%lf",&nt.Preis);
           
           get(ST_Gad7, MUIA_String_Contents, &string);
           sprintf(nt.Titelstring, FORMAT_TITEL, string);
           strcpy(buffer, nt.Titelstring);
           buffer[MAX_TITEL] = 0;
           strcpy(nt.DispTitel, buffer);
           
           get(ST_Gad8, MUIA_String_Contents, &string);
           sprintf(nt.Bemerkungstring, FORMAT_BEMERKUNG, string);
           strcpy(buffer , nt.Bemerkungstring);
           buffer[MAX_REM] = 0;
           strcpy(nt.DispRem, buffer);
           
           FillUnter(&nt);
           
           /* In Liste einfügen */
           DoMethod(LI_Unter, MUIM_List_Insert, 
                    &n, 1, MUIV_List_Insert_Sorted);
           
           ClearDisableUnter();
           EnableUnterGads();
           changes = TRUE;
           
           ReCalcTreib();
           //get(LI_Unter,MUIA_List_Entries, &max);
           set(LI_Unter, MUIA_List_Quiet, FALSE);
           
           if(changeunter)
            {
             set(LI_Unter, MUIA_List_Active, changeactiveunter);
            }
           else
            {
             set(LI_Unter, MUIA_List_Active, MUIV_List_Active_Bottom);
            }
           changeunter = FALSE;
           set(WI_Unter, MUIA_Window_ActiveObject, LV_Unter);
          }
         else
          {
           DisplayBeep(0);
           set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad5);
          }
         break;
        }
       case ID_UN_CHANGE:
        {
         LONG active;
         struct NodeUnter *nt;
         char buffer[30];
         
         get(LI_Unter, MUIA_List_Active, &active);
         if(active >= 0)
          {
           LONG j=0,k=0;
           
           
           DoMethod(LI_Unter, MUIM_List_GetEntry, active, &nt);
           
           changeunter = TRUE;
           changeactiveunter = active;
           
           while(nt->Titelstring[j]    ==' ') j++;
           while(nt->Bemerkungstring[k]==' ') k++;
           
           set(ST_Gad5,  MUIA_String_Contents, &nt->Datum);
           sprintf(buffer, FORMAT_PREIS2, nt->Preis);
           set(ST_Gad6,  MUIA_String_Contents, &buffer);
           set(ST_Gad7,  MUIA_String_Contents, &nt->Titelstring[j]);
           set(ST_Gad8,  MUIA_String_Contents, &nt->Bemerkungstring[k]);
           
           //DoMethod(LI_Unter, MUIM_List_Remove, active);
           
           EnableUnter();
           set(ST_Gad5, MUIA_Disabled, FALSE);
           set(ST_Gad6, MUIA_Disabled, FALSE);
           set(ST_Gad7, MUIA_Disabled, FALSE);
           set(ST_Gad8, MUIA_Disabled, FALSE);
           set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad5);
           
           //ReCalcTreib();
           changes = TRUE;
           DisableUnterGads();
          }
         else
          {
           DisplayBeep(0);
          }
         
         break;
        }
       case ID_UN_DELETE:
        {
         LONG active;
         
         get(LI_Unter, MUIA_List_Active, &active);
         if(active >= 0)
          {
           set(LI_Unter, MUIA_List_Quiet, TRUE);
           DoMethod(LI_Unter, MUIM_List_Remove, active);
           ReCalcTreib();
           changes = TRUE;
           set(LI_Unter, MUIA_List_Quiet, FALSE);
           set(WI_Unter, MUIA_Window_ActiveObject, LV_Unter);
          }
         else
          {
           DisplayBeep(0);
          }
         break;
        }
       case ID_UN_CANCEL:
        {
         EnableUnterGads();
         
         if(changeunter)
          {
           changeunter = FALSE;
          }
         ClearDisableUnter();
         set(WI_Unter, MUIA_Window_ActiveObject, LV_Unter);
         break;
        }
      }
     if(running && signal) Wait(signal);
    }
    /* Und Fenster wieder schließen */
   set(WI_Cost , MUIA_Window_Sleep, FALSE);
   set(WI_Unter, MUIA_Window_Open,  FALSE);
  }
 
 
 
 
/*************************************************************************
 *************************************************************************
 *************************************************************************

Function: LoopNeu()
 Main loop for New-window

Return: VOID

Author: Rüdiger Dreier

History:
 01.10.1993: Initial version

 *************************************************************************
 *************************************************************************
 *************************************************************************/
 
 VOID LoopNeu(LONG flag)
  {
   BOOL running = TRUE;
   BOOL new = TRUE;
   ULONG signal;
   LONG days;
   LONG oldformat = Start_Format;
   char datum[30];
   char *string;
   
   if(flag)
    {
     set(NE_Title,MUIA_Text_Contents  , TEXT(MSG_TITLE_CHANGE));
    }
   else
    {
     set(NE_Title,MUIA_Text_Contents  , TEXT(MSG_TITLE_NEW));
    }
   if(!WI_Neu) return; /* Fehler beim Initialsieren */
   set(WI_Neu, MUIA_Window_Open, TRUE);
   set(WI_Cost , MUIA_Window_Sleep, TRUE);
   set(WI_Neu, MUIA_Window_ActiveObject, NE_Gad1);
   
   if(flag)
    {
     set(NE_Gad2, MUIA_String_Contents, &Start_Datum);
     set(NE_Gad3, MUIA_String_Integer ,  Start_KM);
     set(NE_Gad1, MUIA_String_Contents, &Start_Kennzeichen);
     set(NE_Gad4, MUIA_Cycle_Active   ,  Start_Format);
    }
   
   while (running)
    {
     switch (DoMethod(App,MUIM_Application_Input,&signal))
      {
       case ID_NE_CANCEL:
       case MUIV_Application_ReturnID_Quit:
        {
         running = FALSE;
         new = FALSE;
         break;
        }
       case ID_NE_OK:
       case ID_NE_KM:
        {
         get(NE_Gad4, MUIA_Cycle_Active   , &Start_Format);
         get(NE_Gad2, MUIA_String_Contents, &string);
         strcpy(datum, string);
         days = ConvertToDays(datum);
         if(days != -1)
          {
           running = FALSE;
           new     = TRUE;
          }
         else
          {
           DisplayBeep(0);
           set(WI_Neu, MUIA_Window_ActiveObject, NE_Gad2);
          }
         break;
        }
      }
     if(running && signal) Wait(signal);
    }
   
   if(new)
    {
     /* Neue Datei anlegen */
     get(NE_Gad4, MUIA_Cycle_Active   , &Start_Format);
     
     Start_Day = days;
     strcpy(Start_Datum, datum);
     get(NE_Gad3, MUIA_String_Contents, &string);
     StrToLong(string, &Start_KM);
     get(NE_Gad1, MUIA_String_Contents, &string);
     strcpy(Start_Kennzeichen, string);
     if(!flag)
      {
       RemoveAll();
       changes     = FALSE;
       FileName[0] = 0;
      }
    }
   else
    {
     Start_Format = oldformat;
    }
   /* Und Fenster wieder schließen */
   set(WI_Cost , MUIA_Window_Sleep, FALSE);
   set(WI_Neu  , MUIA_Window_Open,  FALSE);
   ReCalcTreib();
  }
 
 
