home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 5 / ctrom5b.zip / ctrom5b / DOS / KALENDER / IMPRO122 / IMPROSRC.ZIP / ADVANCED.CPP next >
C/C++ Source or Header  |  1994-11-26  |  20KB  |  994 lines

  1. #include "help.h"
  2. #include "mouser.h"
  3. #include <ctype.h>
  4. #include "advanced.h"
  5. #include "gifford.h"
  6.  
  7. advanced::advanced (data dta, bstring hm, Mcursor & mouse) : the_mouse (mouse), buttons(15)
  8.     {
  9.     home = hm;
  10.     the_data = dta;
  11.     }
  12.  
  13. advanced::~advanced()
  14.     {
  15.     }
  16.  
  17. data advanced::show ()
  18.     {
  19.     display ();
  20.     set ();
  21.     get ();
  22.  
  23.     return the_data;
  24.     }
  25.  
  26. void advanced::display ()
  27.     {
  28.     gr_clear ();
  29.     type0 ();
  30.     type1 ();
  31.     type2 ();
  32.     type3 ();
  33.     type4 ();
  34.     type5 ();
  35.     type6 ();
  36.     type7 ();
  37.     type8 ();
  38.     type9 ();
  39.     type10 ();
  40. //    type11 ();
  41.     type12 ();
  42.     type13 ();
  43.  
  44.     current ();
  45.     }
  46.  
  47.  
  48. void advanced::current ()
  49.     {
  50.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  51.     setcolor (WHITE);
  52.     outtextxy (10,440, "Current Settings:");
  53.     setcolor (BLACK);
  54.  
  55.     switch (the_data.occur_type1)
  56.         {
  57.         case -1:
  58.             moveto (50,450);
  59.             outtext ("This has not been set yet.");
  60.             break;
  61.         case 0:
  62.             type0 (the_data.occur_type2, 1);
  63.             break;
  64.         case 1:
  65.             type1 (1);
  66.             break;
  67.         case 2:
  68.             type2 (the_data.occur_type2,1);
  69.             break;
  70.         case 3:
  71.             type3 (the_data.occur_type2, the_data.occur_type3, 1);
  72.             break;
  73.         case 4:
  74.             type4 (the_data.occur_type2,1);
  75.             break;
  76.         case 5:
  77.             type5 (the_data.occur_type2,1);
  78.             break;
  79.         case 6:
  80.             type6 (the_data.occur_type2,1);
  81.             break;
  82.         case 7:
  83.             type7 (the_data.occur_type2,1);
  84.             break;
  85.         case 8:
  86.             type8 (the_data.occur_type2,1);
  87.             break;
  88.         case 9:
  89.             type9 (the_data.occur_type2,1);
  90.             break;
  91.         case 10:
  92.             type10 (0, the_data.occur_type3, the_data.occur_type5,
  93.                 the_data.occur_type4, the_data.occur_type6,
  94.                 the_data.occur_type2, 1);
  95.             break;
  96.         case 12:
  97.             type12 (1);
  98.             break;
  99.  
  100.         case 13:
  101.             type13 (1);
  102.             break;
  103.         }
  104.     }
  105.  
  106. void advanced::type0 (int temp_1, int curr)
  107.     {
  108. // type 0
  109.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  110.     setcolor (BLACK);
  111.     moveto (50,20);
  112.     if (curr)
  113.         moveto (50,450);
  114.     outtext ( "Occurs on the last ");
  115.     bstring temp_text = date_manip.DayName (date_manip.DayOfWeek (the_data.real_day,
  116.         the_data.real_month, the_data.real_year));
  117.     outtext (temp_text.return_string ());
  118.     outtext ( " of ");
  119.     bstring mon_text = date_manip.MonthName (the_data.real_month);
  120.     outtext (mon_text.return_string ());
  121.     outtext ( " every ");
  122.     setcolor (LIGHTRED);
  123.     moveto (432,20);
  124.     if (curr)
  125.         moveto (432,450);
  126.     outtext ("[ ");
  127.     if (temp_1 == -1)
  128.         outtext ("num");
  129.     else
  130.         convert (temp_1);
  131.     outtext (" ]");
  132.     setcolor (BLACK);
  133.     outtext ( " year(s).");
  134.     }
  135.  
  136. void advanced::type1 (int curr)
  137.     {
  138. // type 1
  139.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  140.     setcolor (BLACK);
  141.     moveto (50,55);
  142.     if (curr)
  143.         moveto (50,450);
  144.     outtext ( "Occurs daily.");
  145.     }
  146.  
  147. void advanced::type2 (int temp_1, int curr)
  148.     {
  149. // type 2
  150.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  151.     setcolor (BLACK);
  152.     moveto (50,90);
  153.     if (curr)
  154.         moveto (50,450);
  155.     outtext ("Occurs every ");
  156.     setcolor (LIGHTRED);
  157.     outtext ("[ ");
  158.     if (temp_1 == -1)
  159.         outtext ("num");
  160.     else
  161.         convert (temp_1);
  162.     outtext (" ]");
  163.     setcolor (BLACK);
  164.     outtext ( " week(s) on ");
  165.     bstring temp_text = date_manip.DayName (date_manip.DayOfWeek (the_data.real_day,
  166.         the_data.real_month, the_data.real_year));
  167.     outtext (temp_text.return_string ());
  168.     outtext ( ".");
  169.     }
  170.  
  171. void advanced::type3 (int temp_1, int temp_2, int curr)
  172.     {
  173.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  174.     setcolor (BLACK);
  175.     moveto (50,125);
  176.     if (curr)
  177.         moveto (50,450);
  178.     outtext ( "Occurs on the ");
  179.     temp_1 = date_manip.timesoccured (the_data.real_day,
  180.             the_data.real_month, the_data.real_year);
  181.     outtext (date_manip.Number (temp_1));
  182.     outtext (" ");
  183.     bstring temp_text = date_manip.DayName (date_manip.DayOfWeek
  184.         (the_data.real_day, the_data.real_month, the_data.real_year));
  185.     outtext (temp_text.return_string ());
  186.     outtext ( " of ");
  187.     bstring mon_text = date_manip.MonthName (the_data.real_month);
  188.     outtext (mon_text.return_string ());
  189.     outtext ( " every ");
  190.     setcolor (LIGHTRED);
  191.  
  192.     moveto (456,125);
  193.     if (curr)
  194.         moveto (456,450);
  195.     outtext ("[ ");
  196.     if (temp_2 == -1)
  197.         outtext ("num");
  198.     else
  199.         convert (temp_2);
  200.     outtext (" ]");
  201.     setcolor (BLACK);
  202.     outtext ( " year(s)");
  203.     outtext ( ".");
  204.     }
  205.  
  206. void advanced::type4 (int temp_1, int curr)
  207.     {
  208. // type 4
  209.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  210.     setcolor (BLACK);
  211.     moveto (50,160);
  212.     if (curr)
  213.         moveto (50,450);
  214.     outtext ("Occurs on ");
  215.     bstring mon_text = date_manip.MonthName (the_data.real_month);
  216.     outtext (mon_text.return_string ());
  217.     outtext (" ");
  218.  
  219.     print_day();
  220.  
  221.     outtext ( " every ");
  222.     setcolor (LIGHTRED);
  223.     moveto (280,160);
  224.     if (curr)
  225.         moveto (280,450);
  226.     outtext ("[ ");
  227.     if (temp_1 == -1)
  228.         outtext ("num");
  229.     else
  230.         convert (temp_1);
  231.     outtext (" ]");
  232.     setcolor (BLACK);
  233.     outtext ( " year(s).");
  234.     }
  235.  
  236. void advanced::type5 (int temp_1, int curr)
  237.     {
  238.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  239.     setcolor (BLACK);
  240.     moveto (50,195);
  241.     if (curr)
  242.         moveto (50,450);
  243.     outtext ("Every "); // Every (3rd) (Tues) of every (third) month
  244.     int temp_str = date_manip.timesoccured (the_data.real_day,
  245.             the_data.real_month, the_data.real_year);
  246.     outtext (date_manip.Number (temp_str));
  247.     outtext (" ");
  248.     bstring temp_text = date_manip.DayName (date_manip.DayOfWeek (the_data.real_day,
  249.         the_data.real_month, the_data.real_year));
  250.     outtext (temp_text.return_string ());
  251.     outtext (" every ");
  252.     setcolor (LIGHTRED);
  253.     moveto (280,195);
  254.     if (curr)
  255.         moveto (280,450);
  256.     outtext ("[ ");
  257.     if (temp_1 == -1)
  258.         outtext ("num");
  259.     else
  260.         convert (temp_1);
  261.     outtext (" ]");
  262.     setcolor (BLACK);
  263.     outtext (" month(s).");
  264.     }
  265.  
  266. void advanced::type6 (int temp_1, int curr)
  267.     {
  268.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  269.     setcolor (BLACK);
  270.     moveto (50,230);
  271.     if (curr)
  272.         moveto (50,450);
  273.     outtext ("Occurs on the first day of the month, every ");
  274.     setcolor (LIGHTRED);
  275.     outtext ("[ ");
  276.     if (temp_1 == -1)
  277.         outtext ("num");
  278.     else
  279.         convert (temp_1);
  280.     outtext (" ]");
  281.     setcolor (BLACK);
  282.     outtext (" month(s).");
  283.     }
  284.  
  285. void advanced::type7 (int temp_1, int curr)
  286.     {
  287.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  288.     setcolor (BLACK);
  289.     moveto (50,265);
  290.     if (curr)
  291.         moveto (50,450);
  292.     outtext ("Occurs on the last day of the month, every ");
  293.     setcolor (LIGHTRED);
  294.     outtext ("[ ");
  295.     if (temp_1 == -1)
  296.         outtext ("num");
  297.     else
  298.         convert (temp_1);
  299.     outtext (" ]");
  300.     setcolor (BLACK);
  301.     outtext (" month(s).");
  302.     }
  303.  
  304. void advanced::type8 (int temp_1, int curr)
  305.     {
  306.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  307.     setcolor (BLACK);
  308.     moveto (50,300);
  309.     if (curr)
  310.         moveto (50,450);
  311.     outtext ("Occurs on the last day of ");
  312.     bstring mon_text = date_manip.MonthName (the_data.real_month);
  313.     outtext (mon_text.return_string ());
  314.     outtext (" every ");
  315.     setcolor (LIGHTRED);
  316.     moveto (384,300);
  317.     if (curr)
  318.         moveto (384,450);
  319.     outtext ("[ ");
  320.     if (temp_1 == -1)
  321.         outtext ("num");
  322.     else
  323.         convert (temp_1);
  324.     outtext (" ]");
  325.     setcolor (BLACK);
  326.     outtext (" years(s).");
  327.     }
  328.  
  329. void advanced::type9 (int temp_1, int curr)
  330.     {
  331.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  332.     setcolor (BLACK);
  333.     moveto (50,335);
  334.     if (curr)
  335.         moveto (50,450);
  336.     outtext ("Occurs on day ");
  337.     print_day ();
  338.     outtext (" of every ");
  339.     setcolor (LIGHTRED);
  340.     moveto (256,335);
  341.     if (curr)
  342.         moveto (256,450);
  343.     outtext ("[ ");
  344.     if (temp_1 == -1)
  345.         outtext ("num");
  346.     else
  347.         convert (temp_1);
  348.     outtext (" ]");
  349.     setcolor (BLACK);
  350.     outtext (" month(s).");
  351.  
  352.     }
  353.  
  354. void advanced::type10 (int edit, int temp_1, int temp_2, int temp_3, int temp_4, int temp_5, int curr)
  355.     {
  356.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  357.     setcolor (BLACK);
  358.     moveto (50,365);
  359.     if (curr)
  360.         moveto (50,450);
  361.     outtext ("Occurs every ");
  362.     setcolor (LIGHTRED);
  363.     outtext ("[ ");
  364.     if (temp_1 == -1)
  365.         outtext ("num");
  366.     else
  367.         convert (temp_1,1);
  368.     outtext (" ] ");
  369.     setcolor (BLACK);
  370.     bstring temp_text = date_manip.DayName (date_manip.DayOfWeek (the_data.real_day,
  371.         the_data.real_month, the_data.real_year));
  372.     outtext (temp_text.return_string ());
  373.         outtext (" following the ");
  374.     setcolor (LIGHTRED);
  375.     moveto (406,365);
  376.     if (curr)
  377.         moveto (406,450);
  378.     outtext ("[ ");
  379.     if (temp_2 == -1)
  380.         outtext ("num");
  381.     else
  382.         convert (temp_2,1);
  383.     outtext (" ] ");
  384.     moveto (472,365);
  385.     if (curr)
  386.         moveto (472,450);
  387.     outtext ("[ ");
  388.     if (temp_3 == -1)
  389.         outtext ("day");
  390.     else
  391.         c_day (temp_3);
  392.     outtext (" ] ");
  393.     moveto (50,375+(edit*30));
  394.     if (curr)
  395.         moveto (50,460);
  396.     setcolor (BLACK);
  397.     outtext ("of ");
  398.     setcolor (LIGHTRED);
  399.     outtext ("[");
  400.     if (temp_4 == -1)
  401.         outtext ("month");
  402.     else
  403.         {
  404.         outtext (" ");
  405.         gifford    dm;
  406.  
  407.         bstring temp_var;
  408.         temp_var = dm.MonthName(temp_4);
  409.         bstring destination;
  410.         destination = temp_var (0,3);
  411.         outtext (destination.return_string());
  412.         outtext (" ");
  413.         }
  414.     outtext ("]");
  415.     setcolor (BLACK);
  416.     outtext (" every ");
  417.     setcolor (LIGHTRED);
  418.     outtext ("[ ");
  419.     if (temp_5 == -1)
  420.         outtext ("num");
  421.     else
  422.         convert (temp_5);
  423.     outtext (" ]");
  424.     setcolor (BLACK);
  425.     outtext (" years.");
  426.     }
  427.  
  428. /* void advanced::type11 (int edit, int temp_1, int temp_2, int temp_3)
  429.     {
  430.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  431.     setcolor (BLACK);
  432.     moveto (50,400);
  433.     outtext ("Occurs every ");
  434.     setcolor (LIGHTRED);
  435.     outtext ("[ ");
  436.     if (temp_1 == -1)
  437.         outtext ("num");
  438.     else
  439.         convert (temp_1,1);
  440.     outtext (" ] ");
  441.     setcolor (BLACK);
  442.     outtext (date_manip.DayName (date_manip.DayOfWeek (the_data.real_month,
  443.         the_data.real_day, the_data.real_year)));
  444.     outtext (" following the ");
  445.     setcolor (LIGHTRED);
  446.     outtext ("[ ");
  447.     if (temp_2 == -1)
  448.         outtext ("num");
  449.     else
  450.         convert (temp_2,1);
  451.     outtext (" ] ");
  452.     outtext ("[ ");
  453.     if (temp_3 == -1)
  454.         outtext ("day");
  455.     else
  456.         c_day (temp_3);
  457.     outtext (" ] ");
  458.     moveto (50,410+(edit*30));
  459.     setcolor (BLACK);
  460.     outtext ("of every ");
  461.     setcolor (LIGHTRED);
  462.     outtext ("[ num ] ");
  463.     setcolor (BLACK);
  464.     outtext ("month(s).");
  465.     } */
  466.  
  467. void advanced::type12 (int curr)
  468.     {
  469. // type 12
  470.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  471.     setcolor (BLACK);
  472.     moveto (50,405);
  473.     if (curr)
  474.         moveto (50,450);
  475.     outtext ("A one time event.");
  476.     }
  477.  
  478.  
  479. void advanced::type13 (int curr)
  480.     {
  481.     settextjustify (LEFT_TEXT, CENTER_TEXT);
  482.     setcolor (BLACK);
  483.     moveto (250,405);
  484.     if (curr)
  485.         moveto (50,450);
  486.     outtext ("A historical event.");
  487.     }
  488.  
  489. void advanced::c_day (int day)
  490.     {
  491.     vector<bstring>    these_days(7);
  492.     these_days[0] = "Sun";
  493.     these_days[1] = "Mon";
  494.     these_days[2] = "Tue";
  495.     these_days[3] = "Wed";
  496.     these_days[4] = "Thu";
  497.     these_days[5] = "Fri";
  498.     these_days[6] = "Sat";
  499.  
  500.     outtext (these_days[day].return_string());
  501.     }
  502.  
  503. void advanced::convert (int num, int suffix)
  504.     {
  505.     bstring result;
  506.  
  507.     if (suffix)
  508.         {
  509.         result += char (num+48);
  510.  
  511.         switch (num)
  512.             {
  513.             case 1:
  514.                 result += "st";
  515.                 break;
  516.             case 2:
  517.                 result += "nd";
  518.                 break;
  519.             case 3:
  520.                 result += "rd";
  521.                 break;
  522.             default:
  523.                 result += "th";
  524.                 break;
  525.             }
  526.         }
  527.     else
  528.         {
  529.         result = " ";
  530.         result += char(num+48);
  531.         result += " ";
  532.         }
  533.  
  534.     outtext (result.return_string ());
  535.     }
  536.  
  537.  
  538. void advanced::print_day ()
  539.     {
  540.     bstring the_number;
  541.  
  542.     if (the_data.real_day > 9)
  543.         {
  544.         int t_m = the_data.real_day / 10;
  545.         int o_m = the_data.real_day - (t_m * 10);
  546.         the_number += char(t_m+48);
  547.         the_number += char(o_m+48);
  548.         outtext (the_number.return_string());
  549.         }
  550.     else
  551.         {
  552.         the_number += char(the_data.real_day+48);
  553.         outtext (the_number.return_string());
  554.         }
  555.     }
  556.  
  557. void advanced::set ()
  558.     {
  559.     bstring number_string;
  560.     number_string = " x ";
  561.  
  562.     for (int i = 0; i < 12; i++)
  563.         {
  564.         number_string[1] = char(i+65);
  565.         buttons[i].init (5,(10+i*35),number_string.return_string(),TEXT);
  566.         }
  567.     buttons [12].init (205,395," M ",TEXT);
  568.     buttons [13].init ((getmaxx()-75),(10), " Help ",TEXT);
  569.     buttons [14].init ((getmaxx()-75),(40)," DONE ",TEXT);
  570.     }
  571.  
  572. void advanced::get ()
  573.     {
  574.     int exit = -1;
  575.  
  576.     mouser     read_mouse (buttons, 15, the_mouse, 14);
  577.     read_mouse.show();
  578.  
  579.     while (exit == -1)
  580.         {
  581.         char keypress;
  582.         int option = read_mouse.get (keypress);
  583.  
  584.         keypress = toupper (keypress);
  585.  
  586.         if (option == 13)
  587.             {
  588.             advanced_help ();
  589.             display ();
  590.             read_mouse.show();
  591.             }
  592.  
  593.         if (option == 14 || (option == -1 && keypress == 27))
  594.             exit = -2;
  595.  
  596.         if (option == -1 && (keypress >= 65 && keypress <= 77))
  597.             {
  598.             new_value (keypress - 65);
  599.             display ();
  600.             read_mouse.show();
  601.             exit = -1;
  602.             }
  603.  
  604.         if (option >= 0 && option < 13)
  605.             {
  606.             new_value (option);
  607.             display ();
  608.             read_mouse.show ();
  609.             exit = -1;
  610.             }
  611.         }
  612.     }
  613.  
  614. int advanced::new_value (int exit)
  615.     {
  616.     gifford dm;
  617.     int int_1, int_2, int_3, int_4, int_5;
  618.  
  619.     if (exit > 10)
  620.         exit++;
  621.  
  622.     gr_clear ();
  623.  
  624.     switch (exit)
  625.         {
  626.         case 0:
  627.             type0 ();
  628.             int_1 = num_buttons (427,10);
  629.             if (int_1 > -1)
  630.                 {
  631.                 the_data.occur_type2 = int_1;
  632.                 the_data.occur_type3 = dm.DayOfWeek (
  633.                     the_data.real_day,
  634.                     the_data.real_month,
  635.                     the_data.real_year);
  636.                 the_data.occur_type4 = 0;
  637.                 the_data.occur_type5 = 0;
  638.                 the_data.occur_type6 = 0;
  639.                 }
  640.             else
  641.                 exit = -1;
  642.             break;
  643.         case 1:
  644.             the_data.occur_type2 = 0;
  645.             the_data.occur_type3 = 0;
  646.             the_data.occur_type4 = 0;
  647.             the_data.occur_type5 = 0;
  648.             the_data.occur_type6 = 0;
  649.             break;
  650.         case 2:
  651.             type2 ();
  652.             int_1 = num_buttons (149,80);
  653.             if (int_1 > -1)
  654.                 {
  655.                 the_data.occur_type2 = int_1;
  656.                 the_data.occur_type3 = 0;
  657.                 the_data.occur_type4 = 0;
  658.                 the_data.occur_type5 = 0;
  659.                 the_data.occur_type6 = 0;
  660.                 }
  661.             else
  662.                 exit = -1;
  663.             break;
  664.         case 3:
  665.             type3 (int_1);
  666.             int_2 = num_buttons (452,115);
  667.             if (int_2 > -1)
  668.                 {
  669.                 the_data.occur_type2 = dm.timesoccured (the_data.real_day,
  670.                     the_data.real_month, the_data.real_year);
  671.                 the_data.occur_type3 = int_2;
  672.                 the_data.occur_type4 = dm.DayOfWeek (
  673.                     the_data.real_day,
  674.                     the_data.real_month,
  675.                     the_data.real_year);
  676.                 the_data.occur_type5 = 0;
  677.                 the_data.occur_type6 = 0;
  678.                 }
  679.             else
  680.                 exit = -1;
  681.             break;
  682.         case 4:
  683.             type4 ();
  684.             int_1 = num_buttons (276,150);
  685.             if (int_1 > -1)
  686.                 {
  687.                 the_data.occur_type2 = int_1;
  688.                 the_data.occur_type3 = 0;
  689.                 the_data.occur_type4 = 0;
  690.                 the_data.occur_type5 = 0;
  691.                 the_data.occur_type6 = 0;
  692.                 }
  693.             else
  694.                 exit = -1;
  695.             break;
  696.         case 5:
  697.             type5 ();
  698.             int_1 = num_buttons (276,185);
  699.             if (int_1 > -1)
  700.                 {
  701.                 the_data.occur_type2 = int_1;
  702.                 the_data.occur_type3 = dm.timesoccured (the_data.real_day,
  703.                     the_data.real_month, the_data.real_year);
  704.                 the_data.occur_type4 = dm.DayOfWeek (
  705.                     the_data.real_day,
  706.                     the_data.real_month,
  707.                     the_data.real_year);
  708.                 the_data.occur_type5 = 0;
  709.                 the_data.occur_type6 = 0;
  710.                 }
  711.             else
  712.                 exit = -1;
  713.             break;
  714.         case 6:
  715.             type6 ();
  716.             int_1 = num_buttons (397,160);
  717.             if (int_1 > -1)
  718.                 {
  719.                 the_data.occur_type2 = int_1;
  720.                 the_data.occur_type3 = 0;
  721.                 the_data.occur_type4 = 0;
  722.                 the_data.occur_type5 = 0;
  723.                 the_data.occur_type6 = 0;
  724.                 }
  725.             else
  726.                 exit = -1;
  727.             break;
  728.         case 7:
  729.             type7 ();
  730.             int_1 = num_buttons (389,165);
  731.             if (int_1 > -1)
  732.                 {
  733.                 the_data.occur_type2 = int_1;
  734.                 the_data.occur_type3 = 0;
  735.                 the_data.occur_type4 = 0;
  736.                 the_data.occur_type5 = 0;
  737.                 the_data.occur_type6 = 0;
  738.                 }
  739.             else
  740.                 exit = -1;
  741.             break;
  742.         case 8:
  743.             type8 ();
  744.             int_1 = num_buttons (380,170);
  745.             if (int_1 > -1)
  746.                 {
  747.                 the_data.occur_type2 = int_1;
  748.                 the_data.occur_type3 = 0;
  749.                 the_data.occur_type4 = 0;
  750.                 the_data.occur_type5 = 0;
  751.                 the_data.occur_type6 = 0;
  752.                 }
  753.             else
  754.                 exit = -1;
  755.             break;
  756.         case 9:
  757.             type9 ();
  758.             int_1 = num_buttons (252,204);
  759.             if (int_1 > -1)
  760.                 {
  761.                 the_data.occur_type2 = int_1;
  762.                 the_data.occur_type3 = 0;
  763.                 the_data.occur_type4 = 0;
  764.                 the_data.occur_type5 = 0;
  765.                 the_data.occur_type6 = 0;
  766.                 }
  767.             else
  768.                 exit = -1;
  769.             break;
  770.         case 10:
  771.             type10 (1);
  772.             int_1 = num_buttons (148,115,9,4);
  773.             if (int_1 < 0)
  774.                 {
  775.                 exit = -1;
  776.                 break;
  777.                 }
  778.             gr_clear ();
  779.             type10 (1,int_1);
  780.             int_2 = num_buttons (404,115,9,4);
  781.             if (int_2 < 0)
  782.                 {
  783.                 exit = -1;
  784.                 break;
  785.                 }
  786.             gr_clear ();
  787.             type10 (1,int_1, int_2);
  788.             int_3 = num_buttons (470,175,7,2);
  789.             if (int_3 < 0)
  790.                 {
  791.                 exit = -1;
  792.                 break;
  793.                 }
  794.             gr_clear ();
  795.             type10 (1,int_1, int_2, int_3);
  796.             int_4 = num_buttons (70,65,12,3);
  797.             if (int_4 < 0)
  798.                 {
  799.                 exit = -1;
  800.                 break;
  801.                 }
  802.             gr_clear ();
  803.             type10 (1,int_1, int_2, int_3, int_4);
  804.             int_5 = num_buttons (180,155,9);
  805.             if (int_5 < 0)
  806.                 {
  807.                 exit = -1;
  808.                 break;
  809.                 }
  810.             else
  811.                 {
  812.                 // 2nd (mon) follow 3rd tue of feb every 2 years
  813.                 the_data.occur_type3 = int_1; // 2nd
  814.                 the_data.occur_type5 = int_2; // 3rd
  815.                 the_data.occur_type4 = int_3; // tue
  816.                 the_data.occur_type6 = int_4; // feb
  817.                 the_data.occur_type2 = int_5; // 2 years
  818.                 }
  819.  
  820.             break;
  821. /*        case 11:
  822.             type11 (1);
  823.             int_1 = num_buttons (148,150,9,1);
  824.             if (int_1 < 0)
  825.                 {
  826.                 exit = -1;
  827.                 break;
  828.                 }
  829.             gr_clear ();
  830.             type11 (1,int_1);
  831.             int_2 = num_buttons (398,150,9,1);
  832.             if (int_2 < 0)
  833.                 {
  834.                 exit = -1;
  835.                 break;
  836.                 }
  837.             gr_clear ();
  838.             type11 (1,int_1, int_2);
  839.             int_3 = num_buttons (465,209,7,2);
  840.             if (int_3 < 0)
  841.                 {
  842.                 exit = -1;
  843.                 break;
  844.                 }
  845.             gr_clear ();
  846.             type11 (1,int_1, int_2, int_3);
  847.             int_4 = num_buttons (116,190,9);
  848.             if (int_3 < 0)
  849.                 {
  850.                 exit = -1;
  851.                 break;
  852.                 }
  853.             else
  854.                 {
  855.                 the_data.occur_type2 = int_1;
  856.                 the_data.occur_type3 = int_2;
  857.                 the_data.occur_type4 = int_3;
  858.                 the_data.occur_type5 = int_4;
  859.                 the_data.occur_type6 = 0;
  860.                 }
  861.             break; */
  862.         case 12:
  863.             the_data.occur_type2 = 0;
  864.             the_data.occur_type3 = 0;
  865.             the_data.occur_type4 = 0;
  866.             the_data.occur_type5 = 0;
  867.             the_data.occur_type6 = 0;
  868.             break;
  869.         case 13:
  870.             the_data.viewed = 4;
  871.             the_data.occur_type2 = 0;
  872.             the_data.occur_type3 = 0;
  873.             the_data.occur_type4 = 0;
  874.             the_data.occur_type5 = 0;
  875.             the_data.occur_type6 = 0;
  876.             break;
  877.         }
  878.  
  879.     if (exit != -1)
  880.         the_data.occur_type1 = exit;
  881.  
  882.     if (the_data.occur_type1 == 11)
  883.         the_data.occur_type1 = 12;
  884.  
  885.     return exit;
  886.     }
  887.  
  888.  
  889. void advanced::gr_clear (int x1, int y1, int x2, int y2)
  890.     {
  891.     the_mouse.hide();
  892.     setfillstyle (SOLID_FILL,LIGHTBLUE);
  893.     bar (x1,y1,x2,y2);
  894.     }
  895.  
  896. void advanced::advanced_help ()
  897.     {
  898.     bstring temp_filename = "IMPRO.HL3";
  899.     bstring help_location = home + temp_filename;
  900.  
  901.     help the_help (the_mouse, help_location);
  902.  
  903.     the_help.show ();
  904.     }
  905.  
  906. int advanced::num_buttons (int x, int y, int how_many, int suffix)
  907.     {
  908.     gifford    dm;
  909.  
  910.     vector<bstring>    these_days(7);
  911.     these_days[0] = "Sun";
  912.     these_days[1] = "Mon";
  913.     these_days[2] = "Tue";
  914.     these_days[3] = "Wed";
  915.     these_days[4] = "Thu";
  916.     these_days[5] = "Fri";
  917.     these_days[6] = "Sat";
  918.  
  919.     int exit = 0;
  920.  
  921.     buttons [0].init ((getmaxx()-75),(getmaxy()-30)," DONE ",TEXT);
  922.  
  923.     for (int i = 1; i <= how_many; i++)
  924.         {
  925.         bstring destination;
  926.  
  927.         if (i == 1 && (suffix == 0 || suffix == 1))
  928.             destination = " EVERY ";
  929.         else
  930.             {
  931.             for (int j = 0; j < 3-(suffix>0); j++)
  932.                 destination += ' ';
  933.  
  934.             if (suffix == 0 || suffix == 1 || suffix == 4)
  935.                 destination += char(i+48);
  936.  
  937.             if (suffix == 3)
  938.                 {
  939.                 bstring temp_var;
  940.                 temp_var = dm.MonthName(i);
  941.                 destination += temp_var (0,3);
  942.                 }
  943.  
  944.             if (suffix == 2)
  945.                 destination += these_days[i-1];
  946.  
  947.             if (suffix == 1 || suffix == 4)
  948.                 {
  949.                 switch (i)
  950.                     {
  951.                     case 1:
  952.                         destination += "st";
  953.                         break;
  954.                     case 2:
  955.                         destination += "nd";
  956.                         break;
  957.                     case 3:
  958.                         destination += "rd";
  959.                         break;
  960.                     default:
  961.                         destination += "th";
  962.                         break;
  963.                     }
  964.                 }
  965.             for (int k = 0; k < 3-(suffix > 0); k++)
  966.                 destination += ' ';
  967.             }
  968.  
  969.         buttons[i].init (x,y+(30*(i-1)),(destination.return_string()),TEXT);
  970.         }
  971.  
  972.     mouser     read_mouse (buttons, how_many+1, the_mouse, 0);
  973.     read_mouse.show();
  974.  
  975.  
  976.     while (!exit)
  977.         {
  978.         char keypress;
  979.         int option = read_mouse.get (keypress);
  980.  
  981.         keypress = tolower (keypress);
  982.  
  983.  
  984.         if ((option == -1 && keypress == 27) || option == 0)
  985.             exit = -1;
  986.         if (option > 0)
  987.             exit = option;
  988.         if (option == -1 && (keypress-48) >= 1 && (keypress-48) <= how_many)
  989.             exit = keypress-48;
  990.         }
  991.     if (suffix == 2)
  992.         exit--;
  993.     return exit;
  994.     }