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

  1. #include "demo.h"
  2. #include "Daten.h" 
  3. #include <exec/memory.h>
  4.  
  5.  BOOL datelistopen = FALSE;
  6.  
  7.  
  8. /*************************************************************************
  9.  *************************************************************************
  10.  *************************************************************************
  11.  
  12. Function: DisableTreibGads()
  13.  Disables the most buttons of the fuel window, enables cancel button.
  14.  
  15. Return: VOID
  16.  
  17. Author: Rüdiger Dreier
  18.  
  19. History:
  20.  01.10.1993: Initial version
  21.  
  22.  *************************************************************************
  23.  *************************************************************************
  24.  *************************************************************************/
  25.  
  26.  VOID DisableTreibGads(VOID)
  27.   {
  28.    set(BT_TR_New   , MUIA_Disabled, TRUE);
  29.    set(BT_TR_Change, MUIA_Disabled, TRUE);
  30.    set(BT_TR_Delete, MUIA_Disabled, TRUE);
  31.    set(BT_TR_Cancel, MUIA_Disabled, FALSE);
  32.    set(BT_TR_Close , MUIA_Disabled, TRUE);
  33.    set(LV_Treib    , MUIA_Disabled, TRUE);
  34.   }
  35.  
  36.  
  37.  
  38. /*************************************************************************
  39.  *************************************************************************
  40.  *************************************************************************
  41.  
  42. Function: EnableTreibGads()
  43.  Enables the most buttons of fuel window, disables cancel button
  44.  
  45. Return: VOID
  46.  
  47. Author: Rüdiger Dreier
  48.  
  49. History:
  50.  01.10.1993: Initial version
  51.  
  52.  *************************************************************************
  53.  *************************************************************************
  54.  *************************************************************************/
  55.  
  56.  VOID EnableTreibGads(VOID)
  57.   {
  58.    set(BT_TR_New   , MUIA_Disabled, FALSE);
  59.    set(BT_TR_Change, MUIA_Disabled, FALSE);
  60.    set(BT_TR_Delete, MUIA_Disabled, FALSE);
  61.    set(BT_TR_Cancel, MUIA_Disabled, TRUE);
  62.    set(BT_TR_Close , MUIA_Disabled, FALSE);
  63.    set(LV_Treib    , MUIA_Disabled, FALSE);
  64.   }
  65.  
  66.  
  67.  
  68.  
  69. /*************************************************************************
  70.  *************************************************************************
  71.  *************************************************************************
  72.  
  73. Function: ClearTreib()
  74.  Clears the stringgadget of fuel window
  75.  
  76. Return: VOID
  77.  
  78. Author: Rüdiger Dreier
  79.  
  80. History:
  81.  01.10.1993: Initial version
  82.  
  83.  *************************************************************************
  84.  *************************************************************************
  85.  *************************************************************************/
  86.  
  87.  VOID ClearTreib(VOID)
  88.   {
  89.    set(ST_Gad1, MUIA_String_Contents, "");
  90.    set(ST_Gad2, MUIA_String_Contents, "");
  91.    set(ST_Gad3, MUIA_String_Contents, "");
  92.    set(ST_Gad4, MUIA_String_Contents, "");
  93.   }
  94.  
  95.  
  96.  
  97. /*************************************************************************
  98.  *************************************************************************
  99.  *************************************************************************
  100.  
  101. Function: EnableTreib()
  102.  Enables the stringgadgets in fuel window
  103.  
  104. Return: VOID
  105.  
  106. Author: Rüdiger Dreier
  107.  
  108. History:
  109.  01.10.1993: Initial version
  110.  
  111.  *************************************************************************
  112.  *************************************************************************
  113.  *************************************************************************/
  114.  
  115.  VOID EnableTreib(VOID)
  116.   {
  117.    set(ST_Gad1, MUIA_Disabled, FALSE);
  118.    set(ST_Gad2, MUIA_Disabled, FALSE);
  119.    set(ST_Gad3, MUIA_Disabled, FALSE);
  120.    set(ST_Gad4, MUIA_Disabled, FALSE);
  121.   }
  122.  
  123.  
  124.  
  125. /*************************************************************************
  126.  *************************************************************************
  127.  *************************************************************************
  128.  
  129. Function: DisableTreib()
  130.  Disables the stringgadgets in fuel window.
  131.  
  132. Return: VOID
  133.  
  134. Author: Rüdiger Dreier
  135.  
  136. History:
  137.  01.10.1993: Initial version
  138.  
  139.  *************************************************************************
  140.  *************************************************************************
  141.  *************************************************************************/
  142.  
  143.  VOID DisableTreib(VOID)
  144.   {
  145.    set(ST_Gad1, MUIA_Disabled, TRUE);
  146.    set(ST_Gad2, MUIA_Disabled, TRUE);
  147.    set(ST_Gad3, MUIA_Disabled, TRUE);
  148.    set(ST_Gad4, MUIA_Disabled, TRUE);
  149.    
  150.   }
  151.  
  152.  
  153.  
  154.  
  155. /*************************************************************************
  156.  *************************************************************************
  157.  *************************************************************************
  158.  
  159. Function: DisableUnterGads()
  160.  Disables most of the buttons in support window, enables the cancel button.
  161.  
  162. Return: VOID
  163.  
  164. Author: Rüdiger Dreier
  165.  
  166. History:
  167.  01.10.1993: Initial version
  168.  
  169.  *************************************************************************
  170.  *************************************************************************
  171.  *************************************************************************/
  172.  
  173.  VOID DisableUnterGads(VOID)
  174.   {
  175.    set(BT_UN_New   , MUIA_Disabled, TRUE);
  176.    set(BT_UN_Change, MUIA_Disabled, TRUE);
  177.    set(BT_UN_Delete, MUIA_Disabled, TRUE);
  178.    set(BT_UN_Cancel, MUIA_Disabled, FALSE);
  179.    set(BT_UN_Close , MUIA_Disabled, TRUE);
  180.    set(LV_Unter    , MUIA_Disabled, TRUE);
  181.   }
  182.  
  183.  
  184.  
  185.  
  186. /*************************************************************************
  187.  *************************************************************************
  188.  *************************************************************************
  189.  
  190. Function: EnableUnterGads()
  191.  Enables most of the buttons in support window, disables the cancel button
  192.  
  193. Return: VOID
  194.  
  195. Author: Rüdiger Dreier
  196.  
  197. History:
  198.  01.10.1993: Initial version
  199.  
  200.  *************************************************************************
  201.  *************************************************************************
  202.  *************************************************************************/
  203.  
  204.  VOID EnableUnterGads(VOID)
  205.   {
  206.    set(BT_UN_New   , MUIA_Disabled, FALSE);
  207.    set(BT_UN_Change, MUIA_Disabled, FALSE);
  208.    set(BT_UN_Delete, MUIA_Disabled, FALSE);
  209.    set(BT_UN_Cancel, MUIA_Disabled, TRUE);
  210.    set(BT_UN_Close , MUIA_Disabled, FALSE);
  211.    set(LV_Unter    , MUIA_Disabled, FALSE);
  212.   }
  213.  
  214.  
  215.  
  216.  
  217. /*************************************************************************
  218.  *************************************************************************
  219.  *************************************************************************
  220.  
  221. Function: ClearDisableUnter()
  222.  Clears the stringgadgets in support window, calls DisableUnter()
  223.  
  224. Return: VOID
  225.  
  226. Author: Rüdiger Dreier
  227.  
  228. History:
  229.  01.10.1993: Initial version
  230.  
  231.  *************************************************************************
  232.  *************************************************************************
  233.  *************************************************************************/
  234.  
  235.  VOID ClearDisableUnter(VOID)
  236.   {
  237.    DisableUnter();
  238.    set(ST_Gad5, MUIA_String_Contents, "");
  239.    set(ST_Gad6, MUIA_String_Contents, "");
  240.    set(ST_Gad7, MUIA_String_Contents, "");
  241.    set(ST_Gad8, MUIA_String_Contents, "");
  242.    
  243.   }
  244.  
  245.  
  246.  
  247.  
  248. /*************************************************************************
  249.  *************************************************************************
  250.  *************************************************************************
  251.  
  252. Function: EnableUnter()
  253.  Enables the stringgadget in support window.
  254.  
  255. Return: VOID
  256.  
  257. Author: Rüdiger Dreier
  258.  
  259. History:
  260.  01.10.1993: Initial version
  261.  
  262.  *************************************************************************
  263.  *************************************************************************
  264.  *************************************************************************/
  265.  
  266.  VOID EnableUnter(VOID)
  267.   {
  268.    set(ST_Gad5, MUIA_Disabled, FALSE);
  269.    set(ST_Gad6, MUIA_Disabled, FALSE);
  270.    set(ST_Gad7, MUIA_Disabled, FALSE);
  271.    set(ST_Gad8, MUIA_Disabled, FALSE);
  272.   }
  273.  
  274.  
  275.  
  276.  
  277. /*************************************************************************
  278.  *************************************************************************
  279.  *************************************************************************
  280.  
  281. Function: DisableUnter()
  282.  Disables the stringgadget in support window.
  283.  
  284. Return: VOID
  285.  
  286. Author: Rüdiger Dreier
  287.  
  288. History:
  289.  01.10.1993: Initial version
  290.  
  291.  *************************************************************************
  292.  *************************************************************************
  293.  *************************************************************************/
  294.  
  295.  VOID DisableUnter(VOID)
  296.   {
  297.    set(ST_Gad5, MUIA_Disabled, TRUE);
  298.    set(ST_Gad6, MUIA_Disabled, TRUE);
  299.    set(ST_Gad7, MUIA_Disabled, TRUE);
  300.    set(ST_Gad8, MUIA_Disabled, TRUE);
  301.   }
  302.  
  303.  /* Flag, gibt an, ob Änderungsmodus eingeschaltet wurde */
  304.  BOOL changetreib, changeunter;
  305.  LONG changeactivetreib, changeactiveunter;
  306.  
  307.  
  308. /*************************************************************************
  309.  *************************************************************************
  310.  *************************************************************************
  311.  
  312. Function: Loop()
  313.  Main loop of the program.
  314.  
  315. Return: VOID
  316.  
  317. Author: Rüdiger Dreier
  318.  
  319. History:
  320.  01.10.1993: Initial version
  321.  
  322.  *************************************************************************
  323.  *************************************************************************
  324.  *************************************************************************/
  325.  
  326.  VOID Loop(VOID)
  327.   {
  328.    BOOL running = TRUE;
  329.    ULONG signal;
  330.    
  331.    while (running)
  332.     {
  333.      switch (DoMethod(App,MUIM_Application_Input,&signal))
  334.       {
  335.        case MUIV_Application_ReturnID_Quit:
  336.         {
  337.          if(changes)
  338.           {
  339.            running = !MUI_Request(App, WI_Cost, 0, NULL, 
  340.                                   TEXT(MSG_QUIT_CONT_REQ),
  341.                                   TEXT(MSG_NOTSAVED_QUIT_REQ),
  342.                                   TAG_END);
  343.           }
  344.          else
  345.           {
  346.            running = FALSE;
  347.           }
  348.          
  349.          break;
  350.         }
  351.        case ID_LOAD:
  352.         {
  353.          if(changes)
  354.           {
  355.            if(!MUI_Request(App, WI_Cost, 0, NULL, 
  356.                            TEXT(MSG_LOAD_CANCEL),
  357.                            TEXT(MSG_NOTSAVED_LOAD_REQ),
  358.                            TAG_END))
  359.             {
  360.              break;
  361.             }
  362.           }
  363.          if(GetFileName5(Rq,
  364.                          TEXT(MSG_LOADFILE_REQ),
  365.                          FileName,
  366.                          TEXT(MSG_PATTERN_REQ),
  367.                          LOADFILE,
  368.                          150))
  369.           {
  370.            RemoveAll();
  371.            InsertAll(FileName);
  372.            changes = FALSE;
  373.           }
  374.          break;
  375.         }
  376.        case ID_INSERT:
  377.         {
  378.          if(GetFileName5(Rq,
  379.                          TEXT(MSG_INSERTFILE_REQ),
  380.                          FileName,
  381.                          TEXT(MSG_PATTERN_REQ),
  382.                          LOADFILE,
  383.                          150))
  384.           {
  385.            InsertAll(FileName);
  386.            changes = TRUE;
  387.           }
  388.          break;
  389.         }
  390.        case ID_SAVEAS:
  391.         {
  392.          if(GetFileName5(Rq,
  393.                          TEXT(MSG_SAVEFILE_REQ),
  394.                          FileName,
  395.                          TEXT(MSG_PATTERN_REQ),
  396.                          SAVEFILE,
  397.                          150))
  398.           {
  399.            SaveAll(FileName);
  400.            WriteMyIcon(FileName, TEXT(MSG_DEFAULTTOOL_ICON));
  401.            changes = FALSE;
  402.           }
  403.          break;
  404.         }
  405.        case ID_SAVE:
  406.         {
  407.          if(FileName[0])          
  408.           {
  409.            SaveAll(FileName);
  410.            changes = FALSE;
  411.           }
  412.          else
  413.           {
  414.            if(GetFileName5(Rq,
  415.                            TEXT(MSG_SAVEFILE_REQ),
  416.                            FileName,
  417.                            TEXT(MSG_PATTERN_REQ),
  418.                            SAVEFILE,
  419.                            150))
  420.             {
  421.              SaveAll(FileName);
  422.              WriteMyIcon(FileName, TEXT(MSG_DEFAULTTOOL_ICON));
  423.              changes = FALSE;
  424.             }
  425.           }
  426.          break;
  427.         }
  428.        case ID_PRINT:
  429.         {
  430.          LONG result;
  431.          result = MUI_Request(App, WI_Cost, 0, NULL, 
  432.                               TEXT(MSG_PRINTTO_BUTTONS),
  433.                               TEXT(MSG_PRINTTO_QUESTION),
  434.                               0,
  435.                               TAG_END);
  436.          if(result)
  437.           {
  438.            if(result == 1)
  439.             {
  440.             /* Ausgabe auf den Drucker */
  441.              strcpy(PrtName, "prt:");
  442.              PrintAll(PrtName);
  443.             }
  444.            else
  445.             {
  446.              if(GetFileName5(Rq,
  447.                              TEXT(MSG_SAVEFILE_REQ),
  448.                              PrtName,
  449.                              TEXT(MSG_PATTERN_REQ),
  450.                              SAVEFILE,
  451.                              150))
  452.               {
  453.                PrintAll(PrtName);
  454.               }
  455.             }
  456.           }
  457.          break;
  458.         }
  459.        case ID_MENUCHANGE:
  460.         {
  461.          LONG i,max;
  462.          struct NodeUnter *nu;
  463.          
  464.          LoopNeu(TRUE);
  465.          
  466.          get(LI_Unter, MUIA_List_Entries, &max);
  467.          for(i=0;i<max;i++)
  468.           {
  469.            DoMethod(LI_Unter, MUIM_List_GetEntry, i, &nu);
  470.            ConvertToString(nu->Days, nu->Datum);
  471.           }
  472.          
  473.          //ReCalcTreib();
  474.          break;
  475.         }
  476.        case ID_MENUNEU:
  477.         {
  478.          if(changes)
  479.           {
  480.            if(!MUI_Request(App, WI_Cost, 0, NULL, 
  481.                            TEXT(MSG_CLEAR_CONT_REQ),
  482.                            TEXT(MSG_NOTSAVED_NEW_REQ),
  483.                            TAG_END))
  484.             {
  485.              break;
  486.             }
  487.           }
  488.          LoopNeu(FALSE);
  489.          //ReCalcTreib();
  490.          break;
  491.         }
  492.        case ID_ABOUT:
  493.         {
  494.          MUI_Request(App, WI_Cost, 0, NULL, 
  495.                      TEXT(MSG_ABOUT_OK_REQ),
  496.                      eC ePW "%s\n\n"
  497.                      ePB "Version "VERSION " " DATE "\n"
  498.                      "Copyright 1993/94/95/96 by Rüdiger Dreier.\n\n"
  499.                      "Rüdiger Dreier\nGustav-Winkler-Str. 40\n"
  500.                      "D-33699 Bielefeld, Germany\n\n"
  501.                      "FAX: +49 521 200691\n\n"
  502.                      "EMail: ruediger.dreier@T-Online.DE\n"
  503.                      "\nThis is a MUI-Application.\n"
  504.                      "MUI is copyrighted by Stefan Stuntz.",
  505.                      TEXT(MSG_PROGNAME),
  506.                      TAG_END);
  507.          break;
  508.         }
  509.        case  ID_TREIB:
  510.         {
  511.          /* Treibstoffenster öffnen */
  512.          if(Start_Day)
  513.           {
  514.            TreibLoop();
  515.           }
  516.          else
  517.           {
  518.            LoopNeu(FALSE);
  519.           }
  520.          break;
  521.         }
  522.        case ID_UNTER:
  523.         {
  524.          /* Unterhaltsfenster öffnen */
  525.          if(Start_Day)
  526.           {
  527.            UnterLoop();
  528.           }
  529.          else
  530.           {
  531.            LoopNeu(FALSE);
  532.           }
  533.          break;
  534.         }
  535.       }
  536.      if (running && signal) Wait(signal);
  537.     }
  538.   }
  539.  
  540.  
  541.  
  542.  
  543. /*************************************************************************
  544.  *************************************************************************
  545.  *************************************************************************
  546.  
  547. Function: TreibLoop()
  548.  Main loop for fuel list.
  549.  
  550. Return: VOID
  551.  
  552. Author: Rüdiger Dreier
  553.  
  554. History:
  555.  01.10.1993: Initial version
  556.  
  557.  *************************************************************************
  558.  *************************************************************************
  559.  *************************************************************************/
  560.  
  561.  VOID TreibLoop(VOID)
  562.   {
  563.    BOOL running = TRUE;
  564.    ULONG signal;
  565.    char *string;
  566.    LONG days;
  567.    char datum[30];
  568.    struct NodeTreib nt, *n=&nt;
  569.    LONG km, day;
  570.    
  571.    LONG id;
  572.    
  573.    nt.Verbrauch = 0.;
  574.    nt.deltakm   = 0.;
  575.    
  576.    if(!WI_Treib) return; /* Fehler beim Initialsieren */
  577.    set(WI_Treib, MUIA_Window_Open, TRUE);
  578.    set(WI_Cost , MUIA_Window_Sleep, TRUE);
  579.    
  580.    ClearTreib();
  581.    DisableTreib();
  582.    EnableTreibGads();
  583.    
  584.    set(BT_TR_Cancel, MUIA_Disabled, TRUE);
  585.    set(WI_Treib, MUIA_Window_ActiveObject, LV_Treib);
  586.     
  587.    
  588.    while (running)
  589.     {
  590.      id=DoMethod(App,MUIM_Application_Input,&signal);
  591.      switch (id)
  592.       {
  593.        case MUIV_Application_ReturnID_Quit:
  594.         {
  595.          if(changetreib)
  596.           {
  597.            //ReCalcTreib();
  598.            changetreib = FALSE;
  599.            
  600.            set(LV_Treib, MUIA_Disabled, FALSE);
  601.           }
  602.          running = FALSE;
  603.          break;
  604.         }
  605.        case ID_TR_NEW:
  606.         {
  607.          /* Neuen Eintrag anlegen */
  608.          ClearTreib();
  609.          EnableTreib();
  610.          DisableTreibGads();
  611.          
  612.          /* Falls CANCEL angewählt wird, darf kein Eintrag eingefügt */
  613.          /* werden.                                                  */
  614.          changetreib = FALSE;
  615.          
  616.          set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad1);
  617.          break;
  618.         }
  619.        case ID_TR_DATE:
  620.         {
  621.          /* Datum wurde eingegeben, auf Sinn überprüfen */
  622.          LONG days;
  623.          char datum[30];
  624.          
  625.          
  626.          get(ST_Gad1, MUIA_String_Contents, &string);
  627.          strcpy(datum, string);
  628.          days = ConvertToDays(datum);
  629.          if(days != -1)
  630.           {
  631.            set(ST_Gad1, MUIA_String_Contents, &datum);
  632.            set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad2);
  633.           }
  634.          else
  635.           {
  636.            DisplayBeep(0);
  637.            set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad1);
  638.           }
  639.          break;
  640.         }
  641.        case ID_TR_PRICE:
  642.         {
  643.          get(ST_Gad1, MUIA_String_Contents, &string);
  644.          strcpy(datum, string);
  645.          days = ConvertToDays(datum);
  646.          if(days != -1)
  647.           {
  648.            set(LI_Treib, MUIA_List_Quiet, TRUE);
  649.            
  650.            /* Falls im Modus CHANGE, erst alten Eintrag löschen... */
  651.            if(changetreib)
  652.             {
  653.              DoMethod(LI_Treib, MUIM_List_Remove, changeactivetreib);
  654.             }
  655.            
  656.            /* Erst testen, ob Eintrag einmalig ist */
  657.            //if(CheckTreibList(days))
  658.             {
  659.              /* Alles OK, Eintrag anfertigen */
  660.              strcpy(nt.Datum, datum);
  661.              nt.Days = days;
  662.              
  663.              get(ST_Gad2, MUIA_String_Integer,  &km);
  664.              get(ST_Gad2, MUIA_String_Contents, &string);
  665.              //printf("2:Kilometer >%s< %ld\n",string,km);
  666.              
  667.              /* Aus mir unbekannten Gründen wird oben immer */
  668.              /* eine 0 zurückgegeben...                     */
  669.              StrToLong(string,&km);
  670.              nt.kmStand = km;
  671.              //printf("3:Kilometer %ld\n",km);
  672.              
  673.              nt.Liter = nt.Preis = 0;
  674.              
  675.              get(ST_Gad3, MUIA_String_Contents, &string);
  676.              sscanf(string,"%lf",&nt.Liter);
  677.              //printf(">%s<, %lx %lf\n",string,string,nt.Liter);
  678.              
  679.              get(ST_Gad4, MUIA_String_Contents, &string);
  680.              sscanf(string,"%lf",&nt.Preis);
  681.              //printf(">%s< %lx %lf\n",string,string,nt.Preis);
  682.              
  683.              FillTreib(&nt);
  684.              
  685.              //printf(">%s< >%s< >%s<\n",nt.Datum,nt.Literstring,nt.Preisstring);
  686.              
  687.              /* In Liste einfügen */
  688.              DoMethod(LI_Treib, MUIM_List_Insert, 
  689.                       &n, 1, MUIV_List_Insert_Sorted);
  690.              
  691.              if(day=ReCalcTreib())
  692.               {
  693.                char datum[30];
  694.                
  695.                ConvertToString(day, datum);
  696.                
  697.                MUI_Request(App, WI_Treib, 0, NULL, 
  698.                            TEXT(MSG_ABOUT_OK_REQ),
  699.                            TEXT(MSG_ERROR_IN_FUELLIST),
  700.                            datum,
  701.                            TAG_END);
  702.                
  703.               }
  704.              
  705.              ClearTreib();
  706.              DisableTreib();
  707.              
  708.              EnableTreibGads();
  709.              
  710.              changes = TRUE;
  711.  
  712.                           }
  713. #ifdef OLDVERSION
  714.            else
  715.             {
  716.              DisplayBeep(0);
  717.              MUI_Request(App, WI_Treib, 0, NULL, 
  718.                          TEXT(MSG_ABOUT_OK_REQ),
  719.                          TEXT(MSG_DOUBLE_DATE),
  720.                          TAG_END);
  721.              set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad1);
  722.             }
  723. #endif
  724.            
  725.            /* Letzten Eintrag = aktueller Eintrag */
  726.            //get(LI_Treib,MUIA_List_Entries, &max);
  727.            set(LI_Treib,MUIA_List_Quiet  , FALSE);
  728.            
  729.            if(changetreib)
  730.             {
  731.              set(LI_Treib,MUIA_List_Active , changeactivetreib);
  732.             }
  733.            else
  734.             {
  735.              set(LI_Treib,MUIA_List_Active , MUIV_List_Active_Bottom);
  736.             }
  737.            changetreib = FALSE;
  738.            set(WI_Treib, MUIA_Window_ActiveObject, LV_Treib);
  739.           }
  740.          else
  741.           {
  742.            DisplayBeep(0);
  743.            set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad1);
  744.           }
  745.          break;
  746.         }
  747.        case ID_TR_CANCEL:
  748.         {
  749.          EnableTreibGads();
  750.          
  751. #ifdef tasdtSADF
  752.          if(changetreib)
  753.           {
  754.            /* Falls im Änderungsmodus, den alten */
  755.            /* Eintrag wieder einfügen */
  756.            
  757.            set(LI_Treib, MUIA_List_Quiet, TRUE);
  758.            DoMethod(LI_Treib, MUIM_List_Insert, 
  759.                     &n, 1, MUIV_List_Insert_Sorted);
  760.            
  761.            if(ReCalcTreib())
  762.             {
  763.              set(LI_Treib, MUIA_List_Quiet, FALSE);
  764.              
  765.              MUI_Request(App, WI_Treib, 0, NULL, 
  766.                          TEXT(MSG_ABOUT_OK_REQ),
  767.                          TEXT(MSG_ERROR_IN_FUELLIST),
  768.                          TAG_END);
  769.             }
  770.            else
  771.             {
  772.              set(LI_Treib, MUIA_List_Quiet, FALSE);
  773.             }
  774.            changetreib = FALSE;
  775.           }
  776. #endif
  777.          
  778.          ClearTreib();
  779.          DisableTreib();
  780.          set(WI_Treib, MUIA_Window_ActiveObject, LV_Treib);
  781.          break;
  782.         }
  783.        case ID_TR_CHANGE:
  784.         {
  785.          LONG active;
  786.          struct NodeTreib *nt;
  787.          char buffer[30];
  788.          
  789.          get(LI_Treib, MUIA_List_Active, &active);
  790.          if(active >= 0)
  791.           {
  792.            DisableTreibGads();
  793.            
  794.            DoMethod(LI_Treib, MUIM_List_GetEntry, active, &nt);
  795.            
  796.            //sprintf(buffer,"%ld",nt->kmStand);
  797.            
  798.            set(ST_Gad1,  MUIA_String_Contents, &nt->Datum);
  799.            set(ST_Gad2,  MUIA_String_Integer , nt->kmStand);
  800.            
  801.            
  802.            sprintf(buffer,FORMAT_LITER2,nt->Liter);
  803.            set(ST_Gad3,  MUIA_String_Contents, &buffer);
  804.            sprintf(buffer,FORMAT_PREIS2,nt->Preis);
  805.            set(ST_Gad4,  MUIA_String_Contents, &buffer);
  806.            
  807.            
  808.            //set(LI_Treib, MUIA_List_Quiet, TRUE);
  809.            
  810.            
  811.            //DoMethod(LI_Treib, MUIM_List_Remove, active);
  812.            changetreib       = TRUE;
  813.            changeactivetreib = active;
  814.            
  815.            //printf("KM %ld\n",nt->kmStand);
  816.            
  817.            EnableTreib();
  818.            
  819.            set(WI_Treib, MUIA_Window_ActiveObject, ST_Gad1);
  820.            
  821.            //ReCalcTreib();
  822.            //set(LI_Treib, MUIA_List_Quiet, FALSE);
  823.            changes = TRUE;
  824.           }
  825.          else
  826.           {
  827.            DisplayBeep(0);
  828.           }
  829.          
  830.          break;
  831.         }
  832.        case ID_TR_ACTIVE:
  833.         {
  834.          LONG active;
  835.          char buffer[30];
  836.          struct NodeTreib *nt;
  837.          
  838.          get(LI_Treib, MUIA_List_Active, &active);
  839.          if(active >= 0 && !changetreib)
  840.           {
  841.            DoMethod(LI_Treib, MUIM_List_GetEntry, active, &nt);
  842.            
  843.            set(ST_Gad1,  MUIA_String_Contents, &nt->Datum);
  844.            set(ST_Gad2,  MUIA_String_Integer , nt->kmStand);
  845.            
  846.            sprintf(buffer,FORMAT_LITER2,nt->Liter);
  847.            set(ST_Gad3,  MUIA_String_Contents, &buffer);
  848.            sprintf(buffer,FORMAT_PREIS2,nt->Preis);
  849.            set(ST_Gad4,  MUIA_String_Contents, &buffer);
  850.           }
  851.          break;
  852.         }
  853.        case ID_TR_DELETE:
  854.         {
  855.          LONG active;
  856.          
  857.          get(LI_Treib, MUIA_List_Active, &active);
  858.          if(active >= 0)
  859.           {
  860.            set(LI_Treib, MUIA_List_Quiet, TRUE);
  861.            DoMethod(LI_Treib, MUIM_List_Remove, active);
  862.            if(ReCalcTreib())
  863.             {
  864.              MUI_Request(App, WI_Treib, 0, NULL, 
  865.                          TEXT(MSG_ABOUT_OK_REQ),
  866.                          TEXT(MSG_ERROR_IN_FUELLIST),
  867.                          TAG_END);
  868.             }
  869.            changes = TRUE;
  870.            set(LI_Treib, MUIA_List_Quiet, FALSE);
  871.            set(WI_Treib, MUIA_Window_ActiveObject, LV_Treib);
  872.           }
  873.          else
  874.           {
  875.            DisplayBeep(0);
  876.           }
  877.          break;
  878.         }
  879.       }
  880.      if(running && signal) Wait(signal);
  881.     }
  882.     /* Und Fenster wieder schließen */
  883.    set(WI_Cost , MUIA_Window_Sleep, FALSE);
  884.    set(WI_Treib, MUIA_Window_Open,  FALSE);
  885.   }
  886.  
  887.  
  888.  
  889.  
  890. /*************************************************************************
  891.  *************************************************************************
  892.  *************************************************************************
  893.  
  894. Function: UnterLoop()
  895.  Main loop for support list.
  896.  
  897. Return: VOID
  898.  
  899. Author: Rüdiger Dreier
  900.  
  901. History:
  902.  01.10.1993: Initial version
  903.  
  904.  *************************************************************************
  905.  *************************************************************************
  906.  *************************************************************************/
  907.  
  908.  VOID UnterLoop(VOID)
  909.   {
  910.    BOOL running = TRUE;
  911.    ULONG signal;
  912.    char *string;
  913.    char buffer[MAXTEXTSTRING+1];
  914.    
  915.    
  916.    if(!WI_Unter) return; /* Fehler beim Initialsieren */
  917.    set(WI_Unter, MUIA_Window_Open, TRUE);
  918.    set(WI_Cost , MUIA_Window_Sleep, TRUE);
  919.    
  920.    set(BT_UN_Cancel, MUIA_Disabled, TRUE);
  921.    
  922.    ClearDisableUnter();
  923.    EnableUnterGads();
  924.    set(WI_Unter, MUIA_Window_ActiveObject, LV_Unter);
  925.    
  926.    while (running)
  927.     {
  928.      switch (DoMethod(App,MUIM_Application_Input,&signal))
  929.       {
  930.        case MUIV_Application_ReturnID_Quit:
  931.         {
  932.          if(changeunter)
  933.           {
  934.            //ReCalcTreib();
  935.            changeunter = FALSE;
  936.            set(LV_Unter, MUIA_Disabled, FALSE);
  937.           }
  938.          running = FALSE;
  939.          break;
  940.         }
  941.        case ID_UN_NEW:
  942.         {
  943.          /* Neuen Eintrag anlegen */
  944.          EnableUnter();
  945.          DisableUnterGads();
  946.          set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad5);
  947.          
  948.          changeunter = FALSE;
  949.          
  950.          break;
  951.         }
  952.        case ID_UN_DATE:
  953.         {
  954.          /* Datum wurde eingegeben, auf Sinn überprüfen */
  955.          LONG days;
  956.          char datum[30];
  957.          
  958.          
  959.          get(ST_Gad5, MUIA_String_Contents, &string);
  960.          strcpy(datum, string);
  961.          days = ConvertToDays(datum);
  962.          if(days != -1)
  963.           {
  964.            set(ST_Gad5, MUIA_String_Contents, &datum);
  965.            set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad6);
  966.           }
  967.          else
  968.           {
  969.            DisplayBeep(0);
  970.            set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad5);
  971.           }
  972.          break;
  973.         }
  974.        case ID_UN_PRICE:
  975.         {
  976.          set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad7);
  977.          break;      
  978.         }
  979.        case ID_UN_TITLE:
  980.         {
  981.          set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad8);
  982.          break;      
  983.         }
  984.        case ID_UN_REMARK:
  985.         {
  986.          LONG days;
  987.          char datum[30];
  988.          struct NodeUnter nt, *n=&nt;
  989.          
  990.          get(ST_Gad5, MUIA_String_Contents, &string);
  991.          strcpy(datum, string);
  992.          days = ConvertToDays(datum);
  993.          if(days != -1)
  994.           {
  995.            set(LI_Unter, MUIA_List_Quiet, TRUE);
  996.            
  997.            /* Falls im Modus CHANGE, erst alten Eintrag löschen... */
  998.            if(changeunter)
  999.             {
  1000.              DoMethod(LI_Unter, MUIM_List_Remove, changeactiveunter);
  1001.             }
  1002.            
  1003.            /* Alles OK, Eintrag anfertigen */
  1004.            strcpy(nt.Datum, datum);
  1005.            nt.Days = days;
  1006.            
  1007.            get(ST_Gad6, MUIA_String_Contents, &string);
  1008.            sscanf(string,"%lf",&nt.Preis);
  1009.            
  1010.            get(ST_Gad7, MUIA_String_Contents, &string);
  1011.            sprintf(nt.Titelstring, FORMAT_TITEL, string);
  1012.            strcpy(buffer, nt.Titelstring);
  1013.            buffer[MAX_TITEL] = 0;
  1014.            strcpy(nt.DispTitel, buffer);
  1015.            
  1016.            get(ST_Gad8, MUIA_String_Contents, &string);
  1017.            sprintf(nt.Bemerkungstring, FORMAT_BEMERKUNG, string);
  1018.            strcpy(buffer , nt.Bemerkungstring);
  1019.            buffer[MAX_REM] = 0;
  1020.            strcpy(nt.DispRem, buffer);
  1021.            
  1022.            FillUnter(&nt);
  1023.            
  1024.            /* In Liste einfügen */
  1025.            DoMethod(LI_Unter, MUIM_List_Insert, 
  1026.                     &n, 1, MUIV_List_Insert_Sorted);
  1027.            
  1028.            ClearDisableUnter();
  1029.            EnableUnterGads();
  1030.            changes = TRUE;
  1031.            
  1032.            ReCalcTreib();
  1033.            //get(LI_Unter,MUIA_List_Entries, &max);
  1034.            set(LI_Unter, MUIA_List_Quiet, FALSE);
  1035.            
  1036.            if(changeunter)
  1037.             {
  1038.              set(LI_Unter, MUIA_List_Active, changeactiveunter);
  1039.             }
  1040.            else
  1041.             {
  1042.              set(LI_Unter, MUIA_List_Active, MUIV_List_Active_Bottom);
  1043.             }
  1044.            changeunter = FALSE;
  1045.            set(WI_Unter, MUIA_Window_ActiveObject, LV_Unter);
  1046.           }
  1047.          else
  1048.           {
  1049.            DisplayBeep(0);
  1050.            set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad5);
  1051.           }
  1052.          break;
  1053.         }
  1054.        case ID_UN_CHANGE:
  1055.         {
  1056.          LONG active;
  1057.          struct NodeUnter *nt;
  1058.          char buffer[30];
  1059.          
  1060.          get(LI_Unter, MUIA_List_Active, &active);
  1061.          if(active >= 0)
  1062.           {
  1063.            LONG j=0,k=0;
  1064.            
  1065.            
  1066.            DoMethod(LI_Unter, MUIM_List_GetEntry, active, &nt);
  1067.            
  1068.            changeunter = TRUE;
  1069.            changeactiveunter = active;
  1070.            
  1071.            while(nt->Titelstring[j]    ==' ') j++;
  1072.            while(nt->Bemerkungstring[k]==' ') k++;
  1073.            
  1074.            set(ST_Gad5,  MUIA_String_Contents, &nt->Datum);
  1075.            sprintf(buffer, FORMAT_PREIS2, nt->Preis);
  1076.            set(ST_Gad6,  MUIA_String_Contents, &buffer);
  1077.            set(ST_Gad7,  MUIA_String_Contents, &nt->Titelstring[j]);
  1078.            set(ST_Gad8,  MUIA_String_Contents, &nt->Bemerkungstring[k]);
  1079.            
  1080.            //DoMethod(LI_Unter, MUIM_List_Remove, active);
  1081.            
  1082.            EnableUnter();
  1083.            set(ST_Gad5, MUIA_Disabled, FALSE);
  1084.            set(ST_Gad6, MUIA_Disabled, FALSE);
  1085.            set(ST_Gad7, MUIA_Disabled, FALSE);
  1086.            set(ST_Gad8, MUIA_Disabled, FALSE);
  1087.            set(WI_Unter, MUIA_Window_ActiveObject, ST_Gad5);
  1088.            
  1089.            //ReCalcTreib();
  1090.            changes = TRUE;
  1091.            DisableUnterGads();
  1092.           }
  1093.          else
  1094.           {
  1095.            DisplayBeep(0);
  1096.           }
  1097.          
  1098.          break;
  1099.         }
  1100.        case ID_UN_DELETE:
  1101.         {
  1102.          LONG active;
  1103.          
  1104.          get(LI_Unter, MUIA_List_Active, &active);
  1105.          if(active >= 0)
  1106.           {
  1107.            set(LI_Unter, MUIA_List_Quiet, TRUE);
  1108.            DoMethod(LI_Unter, MUIM_List_Remove, active);
  1109.            ReCalcTreib();
  1110.            changes = TRUE;
  1111.            set(LI_Unter, MUIA_List_Quiet, FALSE);
  1112.            set(WI_Unter, MUIA_Window_ActiveObject, LV_Unter);
  1113.           }
  1114.          else
  1115.           {
  1116.            DisplayBeep(0);
  1117.           }
  1118.          break;
  1119.         }
  1120.        case ID_UN_CANCEL:
  1121.         {
  1122.          EnableUnterGads();
  1123.          
  1124.          if(changeunter)
  1125.           {
  1126.            changeunter = FALSE;
  1127.           }
  1128.          ClearDisableUnter();
  1129.          set(WI_Unter, MUIA_Window_ActiveObject, LV_Unter);
  1130.          break;
  1131.         }
  1132.       }
  1133.      if(running && signal) Wait(signal);
  1134.     }
  1135.     /* Und Fenster wieder schließen */
  1136.    set(WI_Cost , MUIA_Window_Sleep, FALSE);
  1137.    set(WI_Unter, MUIA_Window_Open,  FALSE);
  1138.   }
  1139.  
  1140.  
  1141.  
  1142.  
  1143. /*************************************************************************
  1144.  *************************************************************************
  1145.  *************************************************************************
  1146.  
  1147. Function: LoopNeu()
  1148.  Main loop for New-window
  1149.  
  1150. Return: VOID
  1151.  
  1152. Author: Rüdiger Dreier
  1153.  
  1154. History:
  1155.  01.10.1993: Initial version
  1156.  
  1157.  *************************************************************************
  1158.  *************************************************************************
  1159.  *************************************************************************/
  1160.  
  1161.  VOID LoopNeu(LONG flag)
  1162.   {
  1163.    BOOL running = TRUE;
  1164.    BOOL new = TRUE;
  1165.    ULONG signal;
  1166.    LONG days;
  1167.    LONG oldformat = Start_Format;
  1168.    char datum[30];
  1169.    char *string;
  1170.    
  1171.    if(flag)
  1172.     {
  1173.      set(NE_Title,MUIA_Text_Contents  , TEXT(MSG_TITLE_CHANGE));
  1174.     }
  1175.    else
  1176.     {
  1177.      set(NE_Title,MUIA_Text_Contents  , TEXT(MSG_TITLE_NEW));
  1178.     }
  1179.    if(!WI_Neu) return; /* Fehler beim Initialsieren */
  1180.    set(WI_Neu, MUIA_Window_Open, TRUE);
  1181.    set(WI_Cost , MUIA_Window_Sleep, TRUE);
  1182.    set(WI_Neu, MUIA_Window_ActiveObject, NE_Gad1);
  1183.    
  1184.    if(flag)
  1185.     {
  1186.      set(NE_Gad2, MUIA_String_Contents, &Start_Datum);
  1187.      set(NE_Gad3, MUIA_String_Integer ,  Start_KM);
  1188.      set(NE_Gad1, MUIA_String_Contents, &Start_Kennzeichen);
  1189.      set(NE_Gad4, MUIA_Cycle_Active   ,  Start_Format);
  1190.     }
  1191.    
  1192.    while (running)
  1193.     {
  1194.      switch (DoMethod(App,MUIM_Application_Input,&signal))
  1195.       {
  1196.        case ID_NE_CANCEL:
  1197.        case MUIV_Application_ReturnID_Quit:
  1198.         {
  1199.          running = FALSE;
  1200.          new = FALSE;
  1201.          break;
  1202.         }
  1203.        case ID_NE_OK:
  1204.        case ID_NE_KM:
  1205.         {
  1206.          get(NE_Gad4, MUIA_Cycle_Active   , &Start_Format);
  1207.          get(NE_Gad2, MUIA_String_Contents, &string);
  1208.          strcpy(datum, string);
  1209.          days = ConvertToDays(datum);
  1210.          if(days != -1)
  1211.           {
  1212.            running = FALSE;
  1213.            new     = TRUE;
  1214.           }
  1215.          else
  1216.           {
  1217.            DisplayBeep(0);
  1218.            set(WI_Neu, MUIA_Window_ActiveObject, NE_Gad2);
  1219.           }
  1220.          break;
  1221.         }
  1222.       }
  1223.      if(running && signal) Wait(signal);
  1224.     }
  1225.    
  1226.    if(new)
  1227.     {
  1228.      /* Neue Datei anlegen */
  1229.      get(NE_Gad4, MUIA_Cycle_Active   , &Start_Format);
  1230.      
  1231.      Start_Day = days;
  1232.      strcpy(Start_Datum, datum);
  1233.      get(NE_Gad3, MUIA_String_Contents, &string);
  1234.      StrToLong(string, &Start_KM);
  1235.      get(NE_Gad1, MUIA_String_Contents, &string);
  1236.      strcpy(Start_Kennzeichen, string);
  1237.      if(!flag)
  1238.       {
  1239.        RemoveAll();
  1240.        changes     = FALSE;
  1241.        FileName[0] = 0;
  1242.       }
  1243.     }
  1244.    else
  1245.     {
  1246.      Start_Format = oldformat;
  1247.     }
  1248.    /* Und Fenster wieder schließen */
  1249.    set(WI_Cost , MUIA_Window_Sleep, FALSE);
  1250.    set(WI_Neu  , MUIA_Window_Open,  FALSE);
  1251.    ReCalcTreib();
  1252.   }
  1253.  
  1254.  
  1255.