home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / lora299s.zip / LCFGTXT.CPP < prev    next >
C/C++ Source or Header  |  1997-03-09  |  102KB  |  2,860 lines

  1.  
  2. // ----------------------------------------------------------------------
  3. // LoraBBS Professional Edition - Version 2.99.20
  4. // Copyright (c) 1996 by Marco Maccaferri. All rights reserved.
  5. //
  6. // History:
  7. //    03/10/95 - Initial coding.
  8. // ----------------------------------------------------------------------
  9.  
  10. #include "_ldefs.h"
  11. #include "msgbase.h"
  12. #include "lorawin.h"
  13.  
  14. VOID DisplayButton (USHORT y, USHORT x, CHAR *Text, USHORT Shadow)
  15. {
  16.    USHORT ButtonSize = 8;
  17.    CHAR Temp[48];
  18.  
  19.    if (strlen (Text) > ButtonSize)
  20.       ButtonSize = (USHORT)(strlen (Text) + 1);
  21.    Temp[ButtonSize + 1] = '\0';
  22.  
  23.    memset (Temp, ' ', ButtonSize + 1);
  24.    Temp[ButtonSize] = '▄';
  25.    wprints (y, x, Shadow, Temp);
  26.  
  27.    memset (&Temp[1], '▀', ButtonSize);
  28.    wprints ((short)(y + 1), x, Shadow, Temp);
  29.  
  30.    Temp[ButtonSize] = '\0';
  31.    memset (Temp, ' ', ButtonSize);
  32.    memcpy (&Temp[(ButtonSize - strlen (Text)) / 2], Text, strlen (Text));
  33.    wprints (y, x, BLACK|_GREEN, Temp);
  34. }
  35.  
  36. VOID DisplayTextField (USHORT y, USHORT x, CHAR *Text, USHORT FieldSize, USHORT Size)
  37. {
  38.    CHAR Temp[128];
  39.  
  40.    if (FieldSize < Size)
  41.       Size = FieldSize;
  42.  
  43.    memset (Temp, ' ', Size);
  44.    Temp[Size] = '\0';
  45.    wprints (y, x, WHITE|_BLUE, Temp);
  46.    strcpy (Temp, Text);
  47.    if (strlen (Temp) > Size)
  48.       Temp[Size] = '\0';
  49.    wprints (y, x, WHITE|_BLUE, Temp);
  50. }
  51.  
  52. VOID GetTextField (USHORT y, USHORT x, CHAR *Text, USHORT FieldSize, USHORT Size)
  53. {
  54.    CHAR Temp[128], String[128];
  55.  
  56.    if (FieldSize < Size)
  57.       Size = FieldSize;
  58.    memset (Temp, '?', Size);
  59.    Temp[Size] = '\0';
  60.  
  61.    strcpy (String, Text);
  62.    if (strlen (String) > Size)
  63.       String[Size] = '\0';
  64.    winpbeg (WHITE|_BLUE, WHITE|_BLUE);
  65.    winpdef (y, x, String, Temp, 0, 2, NULL, 0);
  66.    if (winpread () != W_ESCPRESS)
  67.       strcpy (Text, strtrim (String));
  68.    hidecur ();
  69. }
  70.  
  71. USHORT MessageBox (PSZ Caption, PSZ Text)
  72. {
  73.    int menu_sel = 996;
  74.    USHORT RetVal = FALSE;
  75.  
  76.    wopen (9, 24, 15, 55, 1, WHITE|_RED, WHITE|_RED);
  77.    wshadow (DGREY|_BLACK);
  78.    wtitle (Caption, TCENTER, WHITE|_LGREY);
  79.  
  80.    DisplayButton (3, 2, "   Ok   ", BLACK|_RED);
  81.    DisplayButton (3, 12, " Cancel ", BLACK|_RED);
  82.  
  83.    wprints (1, 2, WHITE|_RED, Text);
  84.  
  85.    do {
  86.       wmenubegc ();
  87.       wmenuitem (3, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  88.       wmenuitem (3, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  89.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  90.  
  91.       switch (menu_sel = wmenuget ()) {
  92.          case 996:
  93.             RetVal = TRUE;
  94.             break;
  95.          case 997:
  96.             RetVal = FALSE;
  97.             break;
  98.       }
  99.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  100.  
  101.    wclose ();
  102.  
  103.    return (RetVal);
  104. }
  105.  
  106. // ----------------------------------------------------------------------
  107.  
  108. USHORT CFlagsDlg (PSZ title, ULONG *flags)
  109. {
  110.    int menu_sel = 1;
  111.    USHORT RetVal = FALSE;
  112.    ULONG Flags;
  113.  
  114.    Flags = *flags;
  115.  
  116.    wopen (7, 20, 19, 59, 1, WHITE|_LGREY, WHITE|_LGREY);
  117.    wshadow (DGREY|_BLACK);
  118.    wtitle (title, TCENTER, WHITE|_LGREY);
  119.  
  120.    DisplayButton (9,  2, "   Ok   ");
  121.    DisplayButton (9, 12, " Cancel ");
  122.  
  123.    do {
  124.       wmenubegc ();
  125.       wmenuitem (0, 1, " A1 ", 0, 1, 0, NULL, 0, 0);
  126.       wmenuitem (1, 1, " A2 ", 0, 2, 0, NULL, 0, 0);
  127.       wmenuitem (2, 1, " A3 ", 0, 3, 0, NULL, 0, 0);
  128.       wmenuitem (3, 1, " A4 ", 0, 4, 0, NULL, 0, 0);
  129.       wmenuitem (4, 1, " A5 ", 0, 5, 0, NULL, 0, 0);
  130.       wmenuitem (5, 1, " A6 ", 0, 6, 0, NULL, 0, 0);
  131.       wmenuitem (6, 1, " A7 ", 0, 7, 0, NULL, 0, 0);
  132.       wmenuitem (7, 1, " A8 ", 0, 8, 0, NULL, 0, 0);
  133.       wmenuitem (0, 10, " B1 ", 0, 9, 0, NULL, 0, 0);
  134.       wmenuitem (1, 10, " B2 ", 0, 10, 0, NULL, 0, 0);
  135.       wmenuitem (2, 10, " B3 ", 0, 11, 0, NULL, 0, 0);
  136.       wmenuitem (3, 10, " B4 ", 0, 12, 0, NULL, 0, 0);
  137.       wmenuitem (4, 10, " B5 ", 0, 13, 0, NULL, 0, 0);
  138.       wmenuitem (5, 10, " B6 ", 0, 14, 0, NULL, 0, 0);
  139.       wmenuitem (6, 10, " B7 ", 0, 15, 0, NULL, 0, 0);
  140.       wmenuitem (7, 10, " B8 ", 0, 16, 0, NULL, 0, 0);
  141.       wmenuitem (0, 19, " C1 ", 0, 17, 0, NULL, 0, 0);
  142.       wmenuitem (1, 19, " C2 ", 0, 18, 0, NULL, 0, 0);
  143.       wmenuitem (2, 19, " C3 ", 0, 19, 0, NULL, 0, 0);
  144.       wmenuitem (3, 19, " C4 ", 0, 20, 0, NULL, 0, 0);
  145.       wmenuitem (4, 19, " C5 ", 0, 21, 0, NULL, 0, 0);
  146.       wmenuitem (5, 19, " C6 ", 0, 22, 0, NULL, 0, 0);
  147.       wmenuitem (6, 19, " C7 ", 0, 23, 0, NULL, 0, 0);
  148.       wmenuitem (7, 19, " C8 ", 0, 24, 0, NULL, 0, 0);
  149.       wmenuitem (0, 28, " D1 ", 0, 25, 0, NULL, 0, 0);
  150.       wmenuitem (1, 28, " D2 ", 0, 26, 0, NULL, 0, 0);
  151.       wmenuitem (2, 28, " D3 ", 0, 27, 0, NULL, 0, 0);
  152.       wmenuitem (3, 28, " D4 ", 0, 28, 0, NULL, 0, 0);
  153.       wmenuitem (4, 28, " D5 ", 0, 29, 0, NULL, 0, 0);
  154.       wmenuitem (5, 28, " D6 ", 0, 30, 0, NULL, 0, 0);
  155.       wmenuitem (6, 28, " D7 ", 0, 31, 0, NULL, 0, 0);
  156.       wmenuitem (7, 28, " D8 ", 0, 32, 0, NULL, 0, 0);
  157.  
  158.       wmenuitem (9,  2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  159.       wmenuitem (9, 12, " Cancel ", 'C', 995, 0, NULL, 0, 0);
  160.  
  161.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  162.  
  163.       wprints (0, 6, WHITE|_BLUE, (Flags & 0x80000000L) ? "Yes" : "No ");
  164.       wprints (1, 6, WHITE|_BLUE, (Flags & 0x40000000L) ? "Yes" : "No ");
  165.       wprints (2, 6, WHITE|_BLUE, (Flags & 0x20000000L) ? "Yes" : "No ");
  166.       wprints (3, 6, WHITE|_BLUE, (Flags & 0x10000000L) ? "Yes" : "No ");
  167.       wprints (4, 6, WHITE|_BLUE, (Flags & 0x08000000L) ? "Yes" : "No ");
  168.       wprints (5, 6, WHITE|_BLUE, (Flags & 0x04000000L) ? "Yes" : "No ");
  169.       wprints (6, 6, WHITE|_BLUE, (Flags & 0x02000000L) ? "Yes" : "No ");
  170.       wprints (7, 6, WHITE|_BLUE, (Flags & 0x01000000L) ? "Yes" : "No ");
  171.       wprints (0, 15, WHITE|_BLUE, (Flags & 0x00800000L) ? "Yes" : "No ");
  172.       wprints (1, 15, WHITE|_BLUE, (Flags & 0x00400000L) ? "Yes" : "No ");
  173.       wprints (2, 15, WHITE|_BLUE, (Flags & 0x00200000L) ? "Yes" : "No ");
  174.       wprints (3, 15, WHITE|_BLUE, (Flags & 0x00100000L) ? "Yes" : "No ");
  175.       wprints (4, 15, WHITE|_BLUE, (Flags & 0x00080000L) ? "Yes" : "No ");
  176.       wprints (5, 15, WHITE|_BLUE, (Flags & 0x00040000L) ? "Yes" : "No ");
  177.       wprints (6, 15, WHITE|_BLUE, (Flags & 0x00020000L) ? "Yes" : "No ");
  178.       wprints (7, 15, WHITE|_BLUE, (Flags & 0x00010000L) ? "Yes" : "No ");
  179.       wprints (0, 24, WHITE|_BLUE, (Flags & 0x00008000L) ? "Yes" : "No ");
  180.       wprints (1, 24, WHITE|_BLUE, (Flags & 0x00004000L) ? "Yes" : "No ");
  181.       wprints (2, 24, WHITE|_BLUE, (Flags & 0x00002000L) ? "Yes" : "No ");
  182.       wprints (3, 24, WHITE|_BLUE, (Flags & 0x00001000L) ? "Yes" : "No ");
  183.       wprints (4, 24, WHITE|_BLUE, (Flags & 0x00000800L) ? "Yes" : "No ");
  184.       wprints (5, 24, WHITE|_BLUE, (Flags & 0x00000400L) ? "Yes" : "No ");
  185.       wprints (6, 24, WHITE|_BLUE, (Flags & 0x00000200L) ? "Yes" : "No ");
  186.       wprints (7, 24, WHITE|_BLUE, (Flags & 0x00000100L) ? "Yes" : "No ");
  187.       wprints (0, 33, WHITE|_BLUE, (Flags & 0x00000080L) ? "Yes" : "No ");
  188.       wprints (1, 33, WHITE|_BLUE, (Flags & 0x00000040L) ? "Yes" : "No ");
  189.       wprints (2, 33, WHITE|_BLUE, (Flags & 0x00000020L) ? "Yes" : "No ");
  190.       wprints (3, 33, WHITE|_BLUE, (Flags & 0x00000010L) ? "Yes" : "No ");
  191.       wprints (4, 33, WHITE|_BLUE, (Flags & 0x00000008L) ? "Yes" : "No ");
  192.       wprints (5, 33, WHITE|_BLUE, (Flags & 0x00000004L) ? "Yes" : "No ");
  193.       wprints (6, 33, WHITE|_BLUE, (Flags & 0x00000002L) ? "Yes" : "No ");
  194.       wprints (7, 33, WHITE|_BLUE, (Flags & 0x00000001L) ? "Yes" : "No ");
  195.  
  196.       switch (menu_sel = wmenuget ()) {
  197.          case 1:
  198.             Flags ^= 0x80000000L;
  199.             break;
  200.          case 2:
  201.             Flags ^= 0x40000000L;
  202.             break;
  203.          case 3:
  204.             Flags ^= 0x20000000L;
  205.             break;
  206.          case 4:
  207.             Flags ^= 0x10000000L;
  208.             break;
  209.          case 5:
  210.             Flags ^= 0x08000000L;
  211.             break;
  212.          case 6:
  213.             Flags ^= 0x04000000L;
  214.             break;
  215.          case 7:
  216.             Flags ^= 0x02000000L;
  217.             break;
  218.          case 8:
  219.             Flags ^= 0x01000000L;
  220.             break;
  221.          case 9:
  222.             Flags ^= 0x00800000L;
  223.             break;
  224.          case 10:
  225.             Flags ^= 0x00400000L;
  226.             break;
  227.          case 11:
  228.             Flags ^= 0x00200000L;
  229.             break;
  230.          case 12:
  231.             Flags ^= 0x00100000L;
  232.             break;
  233.          case 13:
  234.             Flags ^= 0x00080000L;
  235.             break;
  236.          case 14:
  237.             Flags ^= 0x00040000L;
  238.             break;
  239.          case 15:
  240.             Flags ^= 0x00020000L;
  241.             break;
  242.          case 16:
  243.             Flags ^= 0x00010000L;
  244.             break;
  245.          case 17:
  246.             Flags ^= 0x00008000L;
  247.             break;
  248.          case 18:
  249.             Flags ^= 0x00004000L;
  250.             break;
  251.          case 19:
  252.             Flags ^= 0x00002000L;
  253.             break;
  254.          case 20:
  255.             Flags ^= 0x00001000L;
  256.             break;
  257.          case 21:
  258.             Flags ^= 0x00000800L;
  259.             break;
  260.          case 22:
  261.             Flags ^= 0x00000400L;
  262.             break;
  263.          case 23:
  264.             Flags ^= 0x00000200L;
  265.             break;
  266.          case 24:
  267.             Flags ^= 0x00000100L;
  268.             break;
  269.          case 25:
  270.             Flags ^= 0x00000080L;
  271.             break;
  272.          case 26:
  273.             Flags ^= 0x00000040L;
  274.             break;
  275.          case 27:
  276.             Flags ^= 0x00000020L;
  277.             break;
  278.          case 28:
  279.             Flags ^= 0x00000010L;
  280.             break;
  281.          case 29:
  282.             Flags ^= 0x00000008L;
  283.             break;
  284.          case 30:
  285.             Flags ^= 0x00000004L;
  286.             break;
  287.          case 31:
  288.             Flags ^= 0x00000002L;
  289.             break;
  290.          case 32:
  291.             Flags ^= 0x00000001L;
  292.             break;
  293.          case 996:
  294.             *flags = Flags;
  295.             break;
  296.       }
  297.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  298.  
  299.    wclose ();
  300.  
  301.    return (RetVal);
  302. }
  303.  
  304. VOID DisplayFlags (USHORT y, USHORT x, ULONG Flags)
  305. {
  306.    int i;
  307.    CHAR Temp[48];
  308.    ULONG Test;
  309.  
  310.    Test = 0x80000000L;
  311.  
  312.    strcpy (Temp, "--------");
  313.    for (i = 0; i < 8; i++, Test >>= 1) {
  314.       if (Flags & Test)
  315.          Temp[i] = 'X';
  316.    }
  317.    wprints (y, x, WHITE|_BLUE, Temp);
  318.    strcpy (Temp, "--------");
  319.    for (i = 0; i < 8; i++, Test >>= 1) {
  320.       if (Flags & Test)
  321.          Temp[i] = 'X';
  322.    }
  323.    wprints (y, (SHORT)(x + 9), WHITE|_BLUE, Temp);
  324.    strcpy (Temp, "--------");
  325.    for (i = 0; i < 8; i++, Test >>= 1) {
  326.       if (Flags & Test)
  327.          Temp[i] = 'X';
  328.    }
  329.    wprints (y, (SHORT)(x + 18), WHITE|_BLUE, Temp);
  330.    strcpy (Temp, "--------");
  331.    for (i = 0; i < 8; i++, Test >>= 1) {
  332.       if (Flags & Test)
  333.          Temp[i] = 'X';
  334.    }
  335.    wprints (y, (SHORT)(x + 27), WHITE|_BLUE, Temp);
  336. }
  337.  
  338. USHORT CSecurityDlg (PSZ title, USHORT *level, ULONG *flags, ULONG *deny_flags)
  339. {
  340.    int menu_sel = 1;
  341.    CHAR Temp[48];
  342.    USHORT RetVal = FALSE, Level;
  343.    ULONG AccessFlags, DenyFlags;
  344.  
  345.    Level = *level;
  346.    AccessFlags = *flags;
  347.    DenyFlags = *deny_flags;
  348.  
  349.    wopen (9, 14, 16, 65, 1, WHITE|_LGREY, WHITE|_LGREY);
  350.    wshadow (DGREY|_BLACK);
  351.    wtitle (title, TCENTER, WHITE|_LGREY);
  352.  
  353.    DisplayButton (4,  2, "   Ok   ");
  354.    DisplayButton (4, 12, " Cancel ");
  355.  
  356.    do {
  357.       wmenubegc ();
  358.       wmenuitem (0, 1, " Level      ", 0, 1, 0, NULL, 0, 0);
  359.       wmenuitem (1, 1, " Flags      ", 0, 2, 0, NULL, 0, 0);
  360.       wmenuitem (2, 1, " Deny Flags ", 0, 3, 0, NULL, 0, 0);
  361.  
  362.       wmenuitem (4,  2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  363.       wmenuitem (4, 12, " Cancel ", 'C', 995, 0, NULL, 0, 0);
  364.  
  365.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  366.  
  367.       sprintf (Temp, "%u", Level);
  368.       DisplayTextField (0, 14, Temp, 5, 5);
  369.       DisplayFlags (1, 14, AccessFlags);
  370.       DisplayFlags (2, 14, DenyFlags);
  371.  
  372.       switch (menu_sel = wmenuget ()) {
  373.          case 1:
  374.             sprintf (Temp, "%u", Level);
  375.             GetTextField (0, 14, Temp, 5, 5);
  376.             Level = (USHORT)atoi (Temp);
  377.             break;
  378.          case 2:
  379.             CFlagsDlg (" Access Flags ", &AccessFlags);
  380.             break;
  381.          case 3:
  382.             CFlagsDlg (" Deny Flags ", &DenyFlags);
  383.             break;
  384.          case 996:
  385.             *level = Level;
  386.             *flags = AccessFlags;
  387.             *deny_flags = DenyFlags;
  388.             break;
  389.       }
  390.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 995);
  391.  
  392.    wclose ();
  393.  
  394.    return (RetVal);
  395. }
  396.  
  397. // ----------------------------------------------------------------------
  398.  
  399. USHORT CRemoveAddressDlg (VOID)
  400. {
  401.    short i, start = 0;
  402.    CHAR Temp[128], *p, **Array;
  403.    USHORT RetVal = FALSE;
  404.    class TCollection List;
  405.  
  406.    if (Cfg->MailAddress.First () == TRUE) {
  407.       i = 0;
  408.       List.Clear ();
  409.       do {
  410.          sprintf (Temp, " %-17.17s ", Cfg->MailAddress.String);
  411.          List.Add (Temp);
  412.          i++;
  413.       } while (Cfg->MailAddress.Next () == TRUE);
  414.  
  415.       if (List.Elements > 0) {
  416.          i = 0;
  417.          Array = (CHAR **)malloc ((List.Elements + 1) * sizeof (CHAR *));
  418.          if ((p = (CHAR *)List.First ()) != NULL)
  419.             do {
  420.                Array[i++] = p;
  421.             } while ((p = (CHAR *)List.Next ()) != NULL);
  422.          Array[i] = NULL;
  423.          if ((i = wpickstr (0 + 4 + 1, 1 + 22 + 1, 9 + 4 + 1, 19 + 22 + 1, 5, BLACK|_CYAN, BLACK|_CYAN, YELLOW|_CYAN, Array, start, NULL)) != -1) {
  424.             if (Cfg->MailAddress.First () == TRUE)
  425.                do {
  426.                   sprintf (Temp, " %-17.17s ", Cfg->MailAddress.String);
  427.                   if (!strcmp (Temp, Array[i])) {
  428.                      Cfg->MailAddress.Delete ();
  429.                      break;
  430.                   }
  431.                } while (Cfg->MailAddress.Next () == TRUE);
  432.             RetVal = TRUE;
  433.          }
  434.          if (Array != NULL)
  435.             free (Array);
  436.       }
  437.       else
  438.          getxch ();
  439.    }
  440.    else
  441.       getxch ();
  442.  
  443.    return (RetVal);
  444. }
  445.  
  446. USHORT CAddressDlg (VOID)
  447. {
  448.    short i, menu_sel = 996;
  449.    CHAR Temp[64];
  450.    USHORT RetVal = FALSE;
  451.  
  452.    wopen (4, 22, 20, 56, 1, WHITE|_LGREY, WHITE|_LGREY);
  453.    wshadow (DGREY|_BLACK);
  454.    wtitle (" Addresses ", TCENTER, WHITE|_LGREY);
  455.  
  456.    DisplayButton (1, 22, "  Add   ");
  457.    DisplayButton (3, 22, " Remove ");
  458.  
  459.    DisplayButton (13, 2, "   Ok   ");
  460.    DisplayButton (13, 12, " Cancel ");
  461.    DisplayButton (13, 22, "  Help  ");
  462.  
  463.    do {
  464.       wmenubegc ();
  465.       wmenuitem (1, 22, "  Add   ", 'A', 102, 0, NULL, 0, 0);
  466.       wmenuitem (3, 22, " Remove ", 'R', 103, 0, NULL, 0, 0);
  467.  
  468.       wmenuitem (11, 1, " Point Fake Net ", 0, 1, 0, NULL, 0, 0);
  469.  
  470.       wmenuitem (13, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  471.       wmenuitem (13, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  472.       wmenuitem (13, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  473.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  474.  
  475.       for (i = 0; i <= 9; i++)
  476.          wprints (i, 1, BLACK|_CYAN, "                   ");
  477.  
  478.       i = 0;
  479.       if (Cfg->MailAddress.First () == TRUE)
  480.          do {
  481.             if (i <= 9) {
  482.                sprintf (Temp, "%.17s", Cfg->MailAddress.String);
  483.                wprints (i++, 2, BLACK|_CYAN, Temp);
  484.             }
  485.          } while (Cfg->MailAddress.Next () == TRUE);
  486.  
  487.       sprintf (Temp, "%u", Cfg->FakeNet);
  488.       DisplayTextField (11, 18, Temp, 5, 5);
  489.  
  490.       switch (menu_sel = wmenuget ()) {
  491.          case 1:
  492.             sprintf (Temp, "%u", Cfg->FakeNet);
  493.             GetTextField (11, 18, Temp, 5, 5);
  494.             Cfg->FakeNet = (USHORT)atoi (Temp);
  495.             break;
  496.          case 102:
  497.             if (wopen (10, 20, 12, 59, 1, WHITE|_LGREY, WHITE|_LGREY) > 0) {
  498.                wshadow (DGREY|_BLACK);
  499.                wtitle (" Add Address ", TCENTER, WHITE|_LGREY);
  500.  
  501.                wprints (0, 1, WHITE|_GREEN, " Address ");
  502.                Temp[0] = '\0';
  503.                winpbeg (WHITE|_BLUE, WHITE|_BLUE);
  504.                winpdef (0, 11, Temp, "??????????????????????????", 0, 2, NULL, 0);
  505.                if (winpread () != W_ESCPRESS && Temp[0] != '\0')
  506.                   Cfg->MailAddress.Add (Temp);
  507.                hidecur ();
  508.                wclose ();
  509.             }
  510.             break;
  511.          case 103:
  512.             CRemoveAddressDlg ();
  513.             break;
  514.          case 996:
  515.             RetVal = TRUE;
  516.             break;
  517.          case 997:
  518.             RetVal = FALSE;
  519.             break;
  520.       }
  521.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  522.  
  523.    wclose ();
  524.  
  525.    return (RetVal);
  526. }
  527.  
  528. USHORT CAnswerDlg (VOID)
  529. {
  530.    short menu_sel = 996;
  531.    CHAR Temp[32], *p;
  532.    USHORT RetVal = FALSE;
  533.  
  534.    wopen (7, 12, 16, 66, 1, WHITE|_LGREY, WHITE|_LGREY);
  535.    wshadow (DGREY|_BLACK);
  536.    wtitle (" Answer Control ", TCENTER, WHITE|_LGREY);
  537.  
  538.    DisplayButton (6, 2, "   Ok   ");
  539.    DisplayButton (6, 12, " Cancel ");
  540.    DisplayButton (6, 22, "  Help  ");
  541.  
  542.    do {
  543.       wmenubegc ();
  544.       wmenuitem (0, 1, " Manual Answer  ", 0, 1, 0, NULL, 0, 0);
  545.       wmenuitem (1, 1, " Answer Command ", 0, 2, 0, NULL, 0, 0);
  546.       wmenuitem (2, 1, " Limited Hours  ", 0, 3, 0, NULL, 0, 0);
  547.       wmenuitem (3, 1, " Starting Time  ", 0, 4, 0, NULL, 0, 0);
  548.       wmenuitem (4, 1, " Ending Time    ", 0, 5, 0, NULL, 0, 0);
  549.       wmenuitem (6, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  550.       wmenuitem (6, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  551.       wmenuitem (6, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  552.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  553.  
  554.       wprints (0, 18, WHITE|_BLUE, (Cfg->ManualAnswer == TRUE) ? "Yes" : "No ");
  555.       DisplayTextField (1, 18, Cfg->Answer, sizeof (Cfg->Answer), 34);
  556.       wprints (2, 18, WHITE|_BLUE, (Cfg->LimitedHours == TRUE) ? "Yes" : "No ");
  557.       sprintf (Temp, "%02d:%02d", Cfg->StartTime / 60, Cfg->StartTime % 60);
  558.       DisplayTextField (3, 18, Temp, 5, 5);
  559.       sprintf (Temp, "%02d:%02d", Cfg->EndTime / 60, Cfg->EndTime % 60);
  560.       DisplayTextField (4, 18, Temp, 5, 5);
  561.  
  562.       switch (menu_sel = wmenuget ()) {
  563.          case 1:
  564.             Cfg->ManualAnswer = (Cfg->ManualAnswer == TRUE) ? FALSE : TRUE;
  565.             break;
  566.          case 2:
  567.             GetTextField (1, 18, Cfg->Answer, sizeof (Cfg->Answer), 34);
  568.             break;
  569.          case 3:
  570.             Cfg->LimitedHours = (Cfg->LimitedHours == TRUE) ? FALSE : TRUE;
  571.             break;
  572.          case 4:
  573.             sprintf (Temp, "%02d:%02d", Cfg->StartTime / 60, Cfg->StartTime % 60);
  574.             GetTextField (3, 12, Temp, 5, 5);
  575.             if ((p = strtok (Temp, ":")) != NULL) {
  576.                Cfg->StartTime = (USHORT)(atoi (p) * 60);
  577.                if ((p = strtok (Temp, ":")) != NULL)
  578.                   Cfg->StartTime += (USHORT)atoi (p);
  579.             }
  580.             break;
  581.          case 5:
  582.             sprintf (Temp, "%02d:%02d", Cfg->EndTime / 60, Cfg->EndTime % 60);
  583.             GetTextField (4, 12, Temp, 5, 5);
  584.             if ((p = strtok (Temp, ":")) != NULL) {
  585.                Cfg->EndTime = (USHORT)(atoi (p) * 60);
  586.                if ((p = strtok (Temp, ":")) != NULL)
  587.                   Cfg->EndTime += (USHORT)atoi (p);
  588.             }
  589.             break;
  590.          case 996:
  591.             RetVal = TRUE;
  592.             break;
  593.          case 997:
  594.             RetVal = FALSE;
  595.             break;
  596.       }
  597.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  598.  
  599.    wclose ();
  600.  
  601.    return (RetVal);
  602. }
  603.  
  604. USHORT CAreafixDlg (VOID)
  605. {
  606.    short menu_sel = 996;
  607.    USHORT RetVal = FALSE;
  608.  
  609.    wopen (8, 5, 17, 73, 1, WHITE|_LGREY, WHITE|_LGREY);
  610.    wshadow (DGREY|_BLACK);
  611.    wtitle (" Areafix ", TCENTER, WHITE|_LGREY);
  612.  
  613.    DisplayButton (6, 2, "   Ok   ");
  614.    DisplayButton (6, 12, " Cancel ");
  615.    DisplayButton (6, 22, "  Help  ");
  616.  
  617.    do {
  618.       wmenubegc ();
  619.       wmenuitem (0, 1, " AREAS.BBS        ", 0, 1, 0, NULL, 0, 0);
  620.       wmenuitem (1, 1, " Use AREAS.BBS    ", 0, 2, 0, NULL, 0, 0);
  621.       wmenuitem (2, 1, " Update AREAS.BBS ", 0, 3, 0, NULL, 0, 0);
  622.       wmenuitem (3, 1, " New Areas Base   ", 0, 4, 0, NULL, 0, 0);
  623.       wmenuitem (4, 1, " New Areas Path   ", 0, 5, 0, NULL, 0, 0);
  624.       wmenuitem (6, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  625.       wmenuitem (6, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  626.       wmenuitem (6, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  627.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  628.  
  629.       DisplayTextField (0, 20, Cfg->AreasBBS, sizeof (Cfg->AreasBBS), 66);
  630.       wprints (1, 20, WHITE|_BLUE, (Cfg->UseAreasBBS == TRUE) ? "Yes" : "No ");
  631.       wprints (2, 20, WHITE|_BLUE, (Cfg->UpdateAreasBBS == TRUE) ? "Yes" : "No ");
  632.       switch (Cfg->NewAreasStorage) {
  633.          case ST_JAM:
  634.             wprints (3, 20, WHITE|_BLUE, "JAM             ");
  635.             break;
  636.          case ST_SQUISH:
  637.             wprints (3, 20, WHITE|_BLUE, "Squish          ");
  638.             break;
  639.          case ST_FIDO:
  640.             wprints (3, 20, WHITE|_BLUE, "Fido *.MSG      ");
  641.             break;
  642.          case ST_ADEPT:
  643.             wprints (3, 20, WHITE|_BLUE, "AdeptXBBS       ");
  644.             break;
  645.          case ST_HUDSON:
  646.             wprints (3, 20, WHITE|_BLUE, "Hudson (QBBS)   ");
  647.             break;
  648.          case ST_PASSTHROUGH:
  649.             wprints (3, 20, WHITE|_BLUE, "Passthrough     ");
  650.             break;
  651.       }
  652.       DisplayTextField (4, 20, Cfg->NewAreasPath, sizeof (Cfg->NewAreasPath), 66);
  653.  
  654.       switch (menu_sel = wmenuget ()) {
  655.          case 1:
  656.             GetTextField (0, 20, Cfg->AreasBBS, sizeof (Cfg->AreasBBS), 66);
  657.             break;
  658.          case 2:
  659.             Cfg->UseAreasBBS = (Cfg->UseAreasBBS == TRUE) ? FALSE : TRUE;
  660.             break;
  661.          case 3:
  662.             Cfg->UpdateAreasBBS = (Cfg->UpdateAreasBBS == TRUE) ? FALSE : TRUE;
  663.             break;
  664.          case 4:
  665.             switch (Cfg->NewAreasStorage) {
  666.                case ST_JAM:
  667.                   Cfg->NewAreasStorage = ST_SQUISH;
  668.                   break;
  669.                case ST_SQUISH:
  670.                   Cfg->NewAreasStorage = ST_FIDO;
  671.                   break;
  672.                case ST_FIDO:
  673.                   Cfg->NewAreasStorage = ST_ADEPT;
  674.                   break;
  675.                case ST_ADEPT:
  676.                   Cfg->NewAreasStorage = ST_HUDSON;
  677.                   break;
  678.                case ST_HUDSON:
  679.                   Cfg->NewAreasStorage = ST_PASSTHROUGH;
  680.                   break;
  681.                case ST_PASSTHROUGH:
  682.                   Cfg->NewAreasStorage = ST_JAM;
  683.                   break;
  684.             }
  685.             break;
  686.          case 5:
  687.             GetTextField (4, 20, Cfg->NewAreasPath, sizeof (Cfg->NewAreasPath), 66);
  688.             break;
  689.          case 996:
  690.             RetVal = TRUE;
  691.             break;
  692.          case 997:
  693.             RetVal = FALSE;
  694.             break;
  695.       }
  696.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  697.  
  698.    wclose ();
  699.  
  700.    return (RetVal);
  701. }
  702.  
  703. USHORT CCommandsDlg (VOID)
  704. {
  705.    short menu_sel = 996;
  706.    USHORT RetVal = FALSE;
  707.  
  708.    wopen (7, 12, 17, 66, 1, WHITE|_LGREY, WHITE|_LGREY);
  709.    wshadow (DGREY|_BLACK);
  710.    wtitle (" Command Strings ", TCENTER, WHITE|_LGREY);
  711.  
  712.    DisplayButton (7, 2, "   Ok   ");
  713.    DisplayButton (7, 12, " Cancel ");
  714.    DisplayButton (7, 22, "  Help  ");
  715.  
  716.    do {
  717.       wmenubegc ();
  718.       wmenuitem (0, 1, " Init. 1  ", 0, 1, 0, NULL, 0, 0);
  719.       wmenuitem (1, 1, " Init. 2  ", 0, 2, 0, NULL, 0, 0);
  720.       wmenuitem (2, 1, " Init. 3  ", 0, 3, 0, NULL, 0, 0);
  721.       wmenuitem (3, 1, " Dialing  ", 0, 4, 0, NULL, 0, 0);
  722.       wmenuitem (4, 1, " Hangup   ", 0, 5, 0, NULL, 0, 0);
  723.       wmenuitem (5, 1, " Off Hook ", 0, 6, 0, NULL, 0, 0);
  724.       wmenuitem (7, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  725.       wmenuitem (7, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  726.       wmenuitem (7, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  727.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  728.  
  729.       DisplayTextField (0, 12, Cfg->Initialize[0], sizeof (Cfg->Initialize[0]), 40);
  730.       DisplayTextField (1, 12, Cfg->Initialize[1], sizeof (Cfg->Initialize[1]), 40);
  731.       DisplayTextField (2, 12, Cfg->Initialize[2], sizeof (Cfg->Initialize[2]), 40);
  732.       DisplayTextField (3, 12, Cfg->Dial, sizeof (Cfg->Dial), 40);
  733.       DisplayTextField (4, 12, Cfg->Hangup, sizeof (Cfg->Hangup), 40);
  734.       DisplayTextField (5, 12, Cfg->OffHook, sizeof (Cfg->OffHook), 40);
  735.  
  736.       switch (menu_sel = wmenuget ()) {
  737.          case 1:
  738.             GetTextField (0, 12, Cfg->Initialize[0], sizeof (Cfg->Initialize[0]), 40);
  739.             break;
  740.          case 2:
  741.             GetTextField (1, 12, Cfg->Initialize[1], sizeof (Cfg->Initialize[1]), 40);
  742.             break;
  743.          case 3:
  744.             GetTextField (2, 12, Cfg->Initialize[2], sizeof (Cfg->Initialize[2]), 40);
  745.             break;
  746.          case 4:
  747.             GetTextField (3, 12, Cfg->Dial, sizeof (Cfg->Dial), 40);
  748.             break;
  749.          case 5:
  750.             GetTextField (4, 12, Cfg->Hangup, sizeof (Cfg->Hangup), 40);
  751.             break;
  752.          case 6:
  753.             GetTextField (5, 12, Cfg->OffHook, sizeof (Cfg->OffHook), 40);
  754.             break;
  755.          case 996:
  756.             RetVal = TRUE;
  757.             break;
  758.          case 997:
  759.             RetVal = FALSE;
  760.             break;
  761.       }
  762.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  763.  
  764.    wclose ();
  765.  
  766.    return (RetVal);
  767. }
  768.  
  769. USHORT CDirectoriesDlg (VOID)
  770. {
  771.    int menu_sel = 996;
  772.    USHORT RetVal = FALSE;
  773.  
  774.    wopen (8, 5, 19, 73, 1, WHITE|_LGREY, WHITE|_LGREY);
  775.    wshadow (DGREY|_BLACK);
  776.    wtitle (" Directory / Paths ", TCENTER, WHITE|_LGREY);
  777.  
  778.    DisplayButton (8, 2, "   Ok   ");
  779.    DisplayButton (8, 12, " Cancel ");
  780.    DisplayButton (8, 22, "  Help  ");
  781.  
  782.    do {
  783.       wmenubegc ();
  784.       wmenuitem (0, 1, " System Path   ", 0, 1, 0, NULL, 0, 0);
  785.       wmenuitem (1, 1, " Outbound      ", 0, 2, 0, NULL, 0, 0);
  786.       wmenuitem (2, 1, " Norm. Inbound ", 0, 3, 0, NULL, 0, 0);
  787.       wmenuitem (3, 1, " Known Inbound ", 0, 4, 0, NULL, 0, 0);
  788.       wmenuitem (4, 1, " Prot. Inbound ", 0, 5, 0, NULL, 0, 0);
  789.       wmenuitem (5, 1, " Nodelist      ", 0, 6, 0, NULL, 0, 0);
  790.       wmenuitem (6, 1, " Hudson Base   ", 0, 7, 0, NULL, 0, 0);
  791.       wmenuitem (8, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  792.       wmenuitem (8, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  793.       wmenuitem (8, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  794.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  795.  
  796.       DisplayTextField (0, 17, Cfg->SystemPath, sizeof (Cfg->SystemPath), 49);
  797.       DisplayTextField (1, 17, Cfg->Outbound, sizeof (Cfg->Outbound), 49);
  798.       DisplayTextField (2, 17, Cfg->NormalInbound, sizeof (Cfg->NormalInbound), 49);
  799.       DisplayTextField (3, 17, Cfg->KnownInbound, sizeof (Cfg->KnownInbound), 49);
  800.       DisplayTextField (4, 17, Cfg->ProtectedInbound, sizeof (Cfg->ProtectedInbound), 49);
  801.       DisplayTextField (5, 17, Cfg->NodelistPath, sizeof (Cfg->NodelistPath), 49);
  802.       DisplayTextField (6, 17, Cfg->HudsonPath, sizeof (Cfg->HudsonPath), 49);
  803.  
  804.       switch (menu_sel = wmenuget ()) {
  805.          case 1:
  806.             GetTextField (0, 17, Cfg->SystemPath, sizeof (Cfg->SystemPath), 49);
  807.             break;
  808.          case 2:
  809.             GetTextField (1, 17, Cfg->Outbound, sizeof (Cfg->Outbound), 49);
  810.             break;
  811.          case 3:
  812.             GetTextField (2, 17, Cfg->NormalInbound, sizeof (Cfg->NormalInbound), 49);
  813.             break;
  814.          case 4:
  815.             GetTextField (3, 17, Cfg->KnownInbound, sizeof (Cfg->KnownInbound), 49);
  816.             break;
  817.          case 5:
  818.             GetTextField (4, 17, Cfg->ProtectedInbound, sizeof (Cfg->ProtectedInbound), 49);
  819.             break;
  820.          case 6:
  821.             GetTextField (5, 17, Cfg->NodelistPath, sizeof (Cfg->NodelistPath), 49);
  822.             break;
  823.          case 7:
  824.             GetTextField (6, 17, Cfg->HudsonPath, sizeof (Cfg->HudsonPath), 49);
  825.             break;
  826.          case 996:
  827.             RetVal = TRUE;
  828.             break;
  829.          case 997:
  830.             RetVal = FALSE;
  831.             break;
  832.       }
  833.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  834.  
  835.    wclose ();
  836.  
  837.    return (RetVal);
  838. }
  839.  
  840. // ----------------------------------------------------------------------
  841. #define DAY_SUN      0x01
  842. #define DAY_MON      0x02
  843. #define DAY_TUE      0x04
  844. #define DAY_WED      0x08
  845. #define DAY_THU      0x10
  846. #define DAY_FRI      0x20
  847. #define DAY_SAT      0x40
  848.  
  849. USHORT CWeekDaysDlg (USHORT *Days)
  850. {
  851.    int menu_sel = 996;
  852.    UCHAR Sun, Mon, Tue, Wed, Thu, Fri, Sat;
  853.    USHORT RetVal = FALSE;
  854.  
  855.    Sun = (*Days & DAY_SUN) ? TRUE : FALSE;
  856.    Mon = (*Days & DAY_MON) ? TRUE : FALSE;
  857.    Tue = (*Days & DAY_TUE) ? TRUE : FALSE;
  858.    Wed = (*Days & DAY_WED) ? TRUE : FALSE;
  859.    Thu = (*Days & DAY_THU) ? TRUE : FALSE;
  860.    Fri = (*Days & DAY_FRI) ? TRUE : FALSE;
  861.    Sat = (*Days & DAY_SAT) ? TRUE : FALSE;
  862.  
  863.    wopen (7, 28, 18, 52, 1, WHITE|_LGREY, WHITE|_LGREY);
  864.    wshadow (DGREY|_BLACK);
  865.    wtitle (" Week Days ", TCENTER, WHITE|_LGREY);
  866.  
  867.    DisplayButton (8, 2, "   Ok   ");
  868.    DisplayButton (8, 12, " Cancel ");
  869.  
  870.    do {
  871.       wmenubegc ();
  872.       wmenuitem (0, 1, " Sunday    ", 0, 1, 0, NULL, 0, 0);
  873.       wmenuitem (1, 1, " Monday    ", 0, 2, 0, NULL, 0, 0);
  874.       wmenuitem (2, 1, " Tuesday   ", 0, 3, 0, NULL, 0, 0);
  875.       wmenuitem (3, 1, " Wednesday ", 0, 4, 0, NULL, 0, 0);
  876.       wmenuitem (4, 1, " Thursday  ", 0, 5, 0, NULL, 0, 0);
  877.       wmenuitem (5, 1, " Friday    ", 0, 6, 0, NULL, 0, 0);
  878.       wmenuitem (6, 1, " Saturday  ", 0, 7, 0, NULL, 0, 0);
  879.       wmenuitem (8, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  880.       wmenuitem (8, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  881.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  882.  
  883.       wprints (0, 13, WHITE|_BLUE, (Sun == TRUE) ? "Yes" : "No ");
  884.       wprints (1, 13, WHITE|_BLUE, (Mon == TRUE) ? "Yes" : "No ");
  885.       wprints (2, 13, WHITE|_BLUE, (Tue == TRUE) ? "Yes" : "No ");
  886.       wprints (3, 13, WHITE|_BLUE, (Wed == TRUE) ? "Yes" : "No ");
  887.       wprints (4, 13, WHITE|_BLUE, (Thu == TRUE) ? "Yes" : "No ");
  888.       wprints (5, 13, WHITE|_BLUE, (Fri == TRUE) ? "Yes" : "No ");
  889.       wprints (6, 13, WHITE|_BLUE, (Sat == TRUE) ? "Yes" : "No ");
  890.  
  891.       switch (menu_sel = wmenuget ()) {
  892.          case 1:
  893.             Sun = (Sun == TRUE) ? FALSE : TRUE;
  894.             break;
  895.          case 2:
  896.             Mon = (Mon == TRUE) ? FALSE : TRUE;
  897.             break;
  898.          case 3:
  899.             Tue = (Tue == TRUE) ? FALSE : TRUE;
  900.             break;
  901.          case 4:
  902.             Wed = (Wed == TRUE) ? FALSE : TRUE;
  903.             break;
  904.          case 5:
  905.             Thu = (Thu == TRUE) ? FALSE : TRUE;
  906.             break;
  907.          case 6:
  908.             Fri = (Fri == TRUE) ? FALSE : TRUE;
  909.             break;
  910.          case 7:
  911.             Sat = (Sat == TRUE) ? FALSE : TRUE;
  912.             break;
  913.          case 996:
  914.             RetVal = TRUE;
  915.             *Days = 0;
  916.             *Days |= (Sun == TRUE) ? DAY_SUN : 0;
  917.             *Days |= (Mon == TRUE) ? DAY_MON : 0;
  918.             *Days |= (Tue == TRUE) ? DAY_TUE : 0;
  919.             *Days |= (Wed == TRUE) ? DAY_WED : 0;
  920.             *Days |= (Thu == TRUE) ? DAY_THU : 0;
  921.             *Days |= (Fri == TRUE) ? DAY_FRI : 0;
  922.             *Days |= (Sat == TRUE) ? DAY_SAT : 0;
  923.             break;
  924.          case 997:
  925.             RetVal = FALSE;
  926.             break;
  927.       }
  928.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  929.  
  930.    wclose ();
  931.  
  932.    return (RetVal);
  933. }
  934.  
  935. USHORT CAddEventDlg (USHORT *Start, USHORT *Length, USHORT *WeekDays)
  936. {
  937.    int menu_sel = 996;
  938.    USHORT RetVal = FALSE, Hour, Minute, Len, Days;
  939.    CHAR Temp[16], *p;
  940.    UCHAR Sun, Mon, Tue, Wed, Thu, Fri, Sat;
  941.  
  942.    Days = 0;
  943.    Hour = Minute = Len = 0;
  944.  
  945.    Sun = (Days & DAY_SUN) ? TRUE : FALSE;
  946.    Mon = (Days & DAY_MON) ? TRUE : FALSE;
  947.    Tue = (Days & DAY_TUE) ? TRUE : FALSE;
  948.    Wed = (Days & DAY_WED) ? TRUE : FALSE;
  949.    Thu = (Days & DAY_THU) ? TRUE : FALSE;
  950.    Fri = (Days & DAY_FRI) ? TRUE : FALSE;
  951.    Sat = (Days & DAY_SAT) ? TRUE : FALSE;
  952.  
  953.    wopen (9, 28, 16, 52, 1, WHITE|_LGREY, WHITE|_LGREY);
  954.    wshadow (DGREY|_BLACK);
  955.    wtitle (" Add Event ", TCENTER, WHITE|_LGREY);
  956.  
  957.    DisplayButton (4, 2, "   Ok   ");
  958.    DisplayButton (4, 12, " Cancel ");
  959.  
  960.    do {
  961.       wmenubegc ();
  962.       wmenuitem (0, 1, " Week Days  ", 0, 1, 0, NULL, 0, 0);
  963.       wmenuitem (1, 1, " Start Time ", 0, 2, 0, NULL, 0, 0);
  964.       wmenuitem (2, 1, " Length     ", 0, 3, 0, NULL, 0, 0);
  965.       wmenuitem (4, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  966.       wmenuitem (4, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  967.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  968.  
  969.       strcpy (Temp, "-------");
  970.       if (Sun == TRUE)
  971.          Temp[0] = 'S';
  972.       if (Mon == TRUE)
  973.          Temp[1] = 'M';
  974.       if (Tue == TRUE)
  975.          Temp[2] = 'T';
  976.       if (Wed == TRUE)
  977.          Temp[3] = 'W';
  978.       if (Thu == TRUE)
  979.          Temp[4] = 'T';
  980.       if (Fri == TRUE)
  981.          Temp[5] = 'F';
  982.       if (Sat == TRUE)
  983.          Temp[6] = 'S';
  984.       wprints (0, 14, WHITE|_BLUE, Temp);
  985.       sprintf (Temp, "%02d:%02d", Hour, Minute);
  986.       DisplayTextField (1, 14, Temp, 5, 5);
  987.       sprintf (Temp, "%d", Len);
  988.       DisplayTextField (2, 14, Temp, 5, 5);
  989.  
  990.       switch (menu_sel = wmenuget ()) {
  991.          case 1:
  992.             Days = 0;
  993.             Days |= (Sun == TRUE) ? DAY_SUN : 0;
  994.             Days |= (Mon == TRUE) ? DAY_MON : 0;
  995.             Days |= (Tue == TRUE) ? DAY_TUE : 0;
  996.             Days |= (Wed == TRUE) ? DAY_WED : 0;
  997.             Days |= (Thu == TRUE) ? DAY_THU : 0;
  998.             Days |= (Fri == TRUE) ? DAY_FRI : 0;
  999.             Days |= (Sat == TRUE) ? DAY_SAT : 0;
  1000.             if (CWeekDaysDlg (&Days) == TRUE) {
  1001.                Sun = (Days & DAY_SUN) ? TRUE : FALSE;
  1002.                Mon = (Days & DAY_MON) ? TRUE : FALSE;
  1003.                Tue = (Days & DAY_TUE) ? TRUE : FALSE;
  1004.                Wed = (Days & DAY_WED) ? TRUE : FALSE;
  1005.                Thu = (Days & DAY_THU) ? TRUE : FALSE;
  1006.                Fri = (Days & DAY_FRI) ? TRUE : FALSE;
  1007.                Sat = (Days & DAY_SAT) ? TRUE : FALSE;
  1008.             }
  1009.             break;
  1010.          case 2:
  1011.             sprintf (Temp, "%02d:%02d", Hour, Minute);
  1012.             GetTextField (1, 14, Temp, 5, 5);
  1013.             if ((p = strtok (Temp, ":")) != NULL) {
  1014.                Hour = (USHORT)atoi (p);
  1015.                if ((p = strtok (NULL, ":")) != NULL)
  1016.                   Minute = (USHORT)atoi (p);
  1017.             }
  1018.             break;
  1019.          case 3:
  1020.             sprintf (Temp, "%d", Len);
  1021.             GetTextField (2, 14, Temp, 5, 5);
  1022.             Len = (USHORT)atoi (Temp);
  1023.             break;
  1024.          case 996:
  1025.             RetVal = TRUE;
  1026.             *Start = (USHORT)(Hour * 60 + Minute);
  1027.             *Length = Len;
  1028.             *WeekDays = 0;
  1029.             *WeekDays |= (Sun == TRUE) ? DAY_SUN : 0;
  1030.             *WeekDays |= (Mon == TRUE) ? DAY_MON : 0;
  1031.             *WeekDays |= (Tue == TRUE) ? DAY_TUE : 0;
  1032.             *WeekDays |= (Wed == TRUE) ? DAY_WED : 0;
  1033.             *WeekDays |= (Thu == TRUE) ? DAY_THU : 0;
  1034.             *WeekDays |= (Fri == TRUE) ? DAY_FRI : 0;
  1035.             *WeekDays |= (Sat == TRUE) ? DAY_SAT : 0;
  1036.             break;
  1037.          case 997:
  1038.             RetVal = FALSE;
  1039.             break;
  1040.       }
  1041.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  1042.  
  1043.    wclose ();
  1044.  
  1045.    return (RetVal);
  1046. }
  1047.  
  1048. USHORT CEventDlg (VOID)
  1049. {
  1050.    int menu_sel = 1;
  1051.    USHORT RetVal = FALSE, Days;
  1052.    CHAR Temp[64], *p;
  1053.    class TEvents *Data;
  1054.  
  1055.    if ((Data = new TEvents (Cfg->SchedulerFile)) != NULL)
  1056.       Data->Load ();
  1057.    if (Data->First () == FALSE)
  1058.       Data->New ();
  1059.  
  1060.    wopen (4, 5, 21, 74, 1, WHITE|_LGREY, WHITE|_LGREY);
  1061.    wshadow (DGREY|_BLACK);
  1062.    wtitle (" Event Scheduler ", TCENTER, WHITE|_LGREY);
  1063.  
  1064.    DisplayButton (14,  2, "  Save  ");
  1065.    DisplayButton (14, 12, "  Add   ");
  1066.    DisplayButton (14, 22, " Delete ");
  1067.    DisplayButton (14, 32, "  List  ");
  1068.    DisplayButton (14, 47, "  Prev. ");
  1069.    DisplayButton (14, 57, "  Next  ");
  1070.  
  1071.    do {
  1072.       wmenubegc ();
  1073.       wmenuitem (0, 1, " Title         ", 0, 1, 0, NULL, 0, 0);
  1074.       wmenuitem (1, 1, " Week Days     ", 0, 2, 0, NULL, 0, 0);
  1075.       wmenuitem (2, 1, " Start Time    ", 0, 3, 0, NULL, 0, 0);
  1076.       wmenuitem (2, 23, " Length        ", 0, 4, 0, NULL, 0, 0);
  1077.       wmenuitem (3, 1, " Dynamic       ", 0, 5, 0, NULL, 0, 0);
  1078.       wmenuitem (3, 23, " Mail Only     ", 0, 6, 0, NULL, 0, 0);
  1079.       wmenuitem (3, 45, " Import Normal ", 0, 7, 0, NULL, 0, 0);
  1080.       wmenuitem (4, 1, " Forced        ", 0, 8, 0, NULL, 0, 0);
  1081.       wmenuitem (4, 23, " Allow F.Req.  ", 0, 9, 0, NULL, 0, 0);
  1082.       wmenuitem (4, 45, " Import Prot.  ", 0, 10, 0, NULL, 0, 0);
  1083.       wmenuitem (5, 1, " Clock Adjust. ", 0, 11, 0, NULL, 0, 0);
  1084.       wmenuitem (5, 23, " Make F.Req.   ", 0, 12, 0, NULL, 0, 0);
  1085.       wmenuitem (5, 45, " Import Known  ", 0, 13, 0, NULL, 0, 0);
  1086.       wmenuitem (6, 1, " Max Try       ", 0, 14, 0, NULL, 0, 0);
  1087.       wmenuitem (6, 23, " Send Normal   ", 0, 15, 0, NULL, 0, 0);
  1088.       wmenuitem (6, 45, " Export Mail   ", 0, 16, 0, NULL, 0, 0);
  1089.       wmenuitem (7, 1, " Max Failed    ", 0, 17, 0, NULL, 0, 0);
  1090.       wmenuitem (7, 23, " Send Direct   ", 0, 18, 0, NULL, 0, 0);
  1091.       wmenuitem (7, 45, " Start Import  ", 0, 19, 0, NULL, 0, 0);
  1092.       wmenuitem (8, 1, " Call Delay    ", 0, 20, 0, NULL, 0, 0);
  1093.       wmenuitem (8, 23, " Send Crash    ", 0, 21, 0, NULL, 0, 0);
  1094.       wmenuitem (8, 45, " Start Export  ", 0, 22, 0, NULL, 0, 0);
  1095.       wmenuitem (9, 1, " Forced Poll   ", 0, 23, 0, NULL, 0, 0);
  1096.       wmenuitem (9, 23, " Send Immed.   ", 0, 24, 0, NULL, 0, 0);
  1097.       wmenuitem (9, 45, " Process TIC   ", 0, 25, 0, NULL, 0, 0);
  1098.       wmenuitem (10, 1, " Reserved For  ", 0, 26, 0, NULL, 0, 0);
  1099.       wmenuitem (11, 1, " Route Tag     ", 0, 27, 0, NULL, 0, 0);
  1100.       wmenuitem (12, 1, " Command       ", 0, 28, 0, NULL, 0, 0);
  1101.  
  1102.       wmenuitem (14,  2, "  Save  ", 'S', 996, 0, NULL, 0, 0);
  1103.       wmenuitem (14, 12, "  Add   ", 'A', 115, 0, NULL, 0, 0);
  1104.       wmenuitem (14, 22, " Delete ", 'D', 116, 0, NULL, 0, 0);
  1105.       wmenuitem (14, 32, "  List  ", 'L', 117, 0, NULL, 0, 0);
  1106.       wmenuitem (14, 47, "  Prev. ", 'P', 118, 0, NULL, 0, 0);
  1107.       wmenuitem (14, 57, "  Next  ", 'N', 119, 0, NULL, 0, 0);
  1108.  
  1109.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  1110.  
  1111.       DisplayTextField (0, 17, Data->Label, sizeof (Data->Label), 31);
  1112.       strcpy (Temp, "-------");
  1113.       if (Data->Sunday == TRUE)
  1114.          Temp[0] = 'S';
  1115.       if (Data->Monday == TRUE)
  1116.          Temp[1] = 'M';
  1117.       if (Data->Tuesday == TRUE)
  1118.          Temp[2] = 'T';
  1119.       if (Data->Wednesday == TRUE)
  1120.          Temp[3] = 'W';
  1121.       if (Data->Thursday == TRUE)
  1122.          Temp[4] = 'T';
  1123.       if (Data->Friday == TRUE)
  1124.          Temp[5] = 'F';
  1125.       if (Data->Saturday == TRUE)
  1126.          Temp[6] = 'S';
  1127.       wprints (1, 17, WHITE|_BLUE, Temp);
  1128.       sprintf (Temp, "%02d:%02d", Data->Hour, Data->Minute);
  1129.       DisplayTextField (2, 17, Temp, 5, 5);
  1130.       sprintf (Temp, "%d", Data->Length);
  1131.       DisplayTextField (2, 39, Temp, 5, 5);
  1132.       wprints (3, 17, WHITE|_BLUE, (Data->Dynamic == TRUE) ? "Yes" : "No ");
  1133.       wprints (3, 39, WHITE|_BLUE, (Data->MailOnly == TRUE) ? "Yes" : "No ");
  1134.       wprints (3, 61, WHITE|_BLUE, (Data->ImportNormal == TRUE) ? "Yes" : "No ");
  1135.       wprints (4, 17, WHITE|_BLUE, (Data->Force == TRUE) ? "Yes" : "No ");
  1136.       wprints (4, 39, WHITE|_BLUE, (Data->AllowRequests == TRUE) ? "Yes" : "No ");
  1137.       wprints (4, 61, WHITE|_BLUE, (Data->ImportProtected == TRUE) ? "Yes" : "No ");
  1138.       wprints (5, 39, WHITE|_BLUE, (Data->MakeRequests == TRUE) ? "Yes" : "No ");
  1139.       wprints (5, 61, WHITE|_BLUE, (Data->ImportKnown == TRUE) ? "Yes" : "No ");
  1140.       sprintf (Temp, "%d", Data->MaxCalls);
  1141.       DisplayTextField (6, 17, Temp, 5, 5);
  1142.       wprints (6, 39, WHITE|_BLUE, (Data->SendNormal == TRUE) ? "Yes" : "No ");
  1143.       wprints (6, 61, WHITE|_BLUE, (Data->ExportMail == TRUE) ? "Yes" : "No ");
  1144.       sprintf (Temp, "%d", Data->MaxConnects);
  1145.       DisplayTextField (7, 17, Temp, 5, 5);
  1146.       wprints (7, 39, WHITE|_BLUE, (Data->SendDirect == TRUE) ? "Yes" : "No ");
  1147.       wprints (7, 61, WHITE|_BLUE, (Data->StartImport == TRUE) ? "Yes" : "No ");
  1148.       sprintf (Temp, "%d", Data->CallDelay);
  1149.       DisplayTextField (8, 17, Temp, 5, 5);
  1150.       wprints (8, 39, WHITE|_BLUE, (Data->SendCrash == TRUE) ? "Yes" : "No ");
  1151.       wprints (8, 61, WHITE|_BLUE, (Data->StartExport == TRUE) ? "Yes" : "No ");
  1152.       wprints (9, 17, WHITE|_BLUE, (Data->ForceCall == TRUE) ? "Yes" : "No ");
  1153.       wprints (9, 39, WHITE|_BLUE, (Data->SendImmediate == TRUE) ? "Yes" : "No ");
  1154.       wprints (9, 61, WHITE|_BLUE, (Data->ProcessTIC == TRUE) ? "Yes" : "No ");
  1155.       DisplayTextField (10, 17, Data->Address, sizeof (Data->Address), 32);
  1156.       DisplayTextField (11, 17, Data->RouteCmd, sizeof (Data->RouteCmd), 32);
  1157.       DisplayTextField (12, 17, Data->Command, sizeof (Data->Command), 50);
  1158.  
  1159.       switch (menu_sel = wmenuget ()) {
  1160.          case 1:
  1161.             GetTextField (0, 17, Data->Label, sizeof (Data->Label), 31);
  1162.             break;
  1163.          case 2:
  1164.             Days = 0;
  1165.             Days |= (Data->Sunday == TRUE) ? DAY_SUN : 0;
  1166.             Days |= (Data->Monday == TRUE) ? DAY_MON : 0;
  1167.             Days |= (Data->Tuesday == TRUE) ? DAY_TUE : 0;
  1168.             Days |= (Data->Wednesday == TRUE) ? DAY_WED : 0;
  1169.             Days |= (Data->Thursday == TRUE) ? DAY_THU : 0;
  1170.             Days |= (Data->Friday == TRUE) ? DAY_FRI : 0;
  1171.             Days |= (Data->Saturday == TRUE) ? DAY_SAT : 0;
  1172.             if (CWeekDaysDlg (&Days) == TRUE) {
  1173.                Data->Sunday = (Days & DAY_SUN) ? TRUE : FALSE;
  1174.                Data->Monday = (Days & DAY_MON) ? TRUE : FALSE;
  1175.                Data->Tuesday = (Days & DAY_TUE) ? TRUE : FALSE;
  1176.                Data->Wednesday = (Days & DAY_WED) ? TRUE : FALSE;
  1177.                Data->Thursday = (Days & DAY_THU) ? TRUE : FALSE;
  1178.                Data->Friday = (Days & DAY_FRI) ? TRUE : FALSE;
  1179.                Data->Saturday = (Days & DAY_SAT) ? TRUE : FALSE;
  1180.             }
  1181.             break;
  1182.          case 3:
  1183.             sprintf (Temp, "%02d:%02d", Data->Hour, Data->Minute);
  1184.             GetTextField (2, 17, Temp, 5, 5);
  1185.             if ((p = strtok (Temp, ":")) != NULL) {
  1186.                Data->Hour = (UCHAR)atoi (p);
  1187.                if ((p = strtok (NULL, ":")) != NULL)
  1188.                   Data->Minute = (UCHAR)atoi (p);
  1189.             }
  1190.             break;
  1191.          case 4:
  1192.             sprintf (Temp, "%d", Data->Length);
  1193.             GetTextField (2, 39, Temp, 5, 5);
  1194.             Data->Length = (USHORT)atoi (Temp);
  1195.             break;
  1196.          case 5:
  1197.             Data->Dynamic = (Data->Dynamic == TRUE) ? FALSE : TRUE;
  1198.             break;
  1199.          case 6:
  1200.             Data->MailOnly = (Data->MailOnly == TRUE) ? FALSE : TRUE;
  1201.             break;
  1202.          case 7:
  1203.             Data->ImportNormal = (Data->ImportNormal == TRUE) ? FALSE : TRUE;
  1204.             break;
  1205.          case 8:
  1206.             Data->Force = (Data->Force == TRUE) ? FALSE : TRUE;
  1207.             break;
  1208.          case 9:
  1209.             Data->AllowRequests = (Data->AllowRequests == TRUE) ? FALSE : TRUE;
  1210.             break;
  1211.          case 10:
  1212.             Data->ImportProtected = (Data->ImportProtected == TRUE) ? FALSE : TRUE;
  1213.             break;
  1214.          case 12:
  1215.             Data->MakeRequests = (Data->MakeRequests == TRUE) ? FALSE : TRUE;
  1216.             break;
  1217.          case 13:
  1218.             Data->ImportKnown = (Data->ImportKnown == TRUE) ? FALSE : TRUE;
  1219.             break;
  1220.          case 14:
  1221.             sprintf (Temp, "%d", Data->MaxCalls);
  1222.             GetTextField (6, 17, Temp, 5, 5);
  1223.             Data->MaxCalls = (USHORT)atoi (Temp);
  1224.             break;
  1225.          case 15:
  1226.             Data->SendNormal = (Data->SendNormal == TRUE) ? FALSE : TRUE;
  1227.             break;
  1228.          case 16:
  1229.             Data->ExportMail = (Data->ExportMail == TRUE) ? FALSE : TRUE;
  1230.             break;
  1231.          case 17:
  1232.             sprintf (Temp, "%d", Data->MaxConnects);
  1233.             GetTextField (7, 17, Temp, 5, 5);
  1234.             Data->MaxConnects = (USHORT)atoi (Temp);
  1235.             break;
  1236.          case 18:
  1237.             Data->SendDirect = (Data->SendDirect == TRUE) ? FALSE : TRUE;
  1238.             break;
  1239.          case 19:
  1240.             Data->StartImport = (Data->StartImport == TRUE) ? FALSE : TRUE;
  1241.             break;
  1242.          case 20:
  1243.             sprintf (Temp, "%d", Data->CallDelay);
  1244.             GetTextField (8, 17, Temp, 5, 5);
  1245.             Data->CallDelay = (USHORT)atoi (Temp);
  1246.             break;
  1247.          case 21:
  1248.             Data->SendCrash = (Data->SendCrash == TRUE) ? FALSE : TRUE;
  1249.             break;
  1250.          case 22:
  1251.             Data->StartExport = (Data->StartExport == TRUE) ? FALSE : TRUE;
  1252.             break;
  1253.          case 23:
  1254.             Data->ForceCall = (Data->ForceCall == TRUE) ? FALSE : TRUE;
  1255.             break;
  1256.          case 24:
  1257.             Data->SendImmediate = (Data->SendImmediate == TRUE) ? FALSE : TRUE;
  1258.             break;
  1259.          case 25:
  1260.             Data->ProcessTIC = (Data->ProcessTIC == TRUE) ? FALSE : TRUE;
  1261.             break;
  1262.          case 26:
  1263.             GetTextField (10, 17, Data->Address, sizeof (Data->Address), 32);
  1264.             break;
  1265.          case 27:
  1266.             GetTextField (11, 17, Data->RouteCmd, sizeof (Data->RouteCmd), 32);
  1267.             break;
  1268.          case 28:
  1269.             GetTextField (12, 17, Data->Command, sizeof (Data->Command), 50);
  1270.             break;
  1271.          case 115: {
  1272.             USHORT NewStart, NewLength, NewDays;
  1273.  
  1274.             if (CAddEventDlg (&NewStart, &NewLength, &NewDays) == TRUE) {
  1275.                Data->New ();
  1276.                Data->Sunday = (NewDays & DAY_SUN) ? TRUE : FALSE;
  1277.                Data->Monday = (NewDays & DAY_MON) ? TRUE : FALSE;
  1278.                Data->Tuesday = (NewDays & DAY_TUE) ? TRUE : FALSE;
  1279.                Data->Wednesday = (NewDays & DAY_WED) ? TRUE : FALSE;
  1280.                Data->Thursday = (NewDays & DAY_THU) ? TRUE : FALSE;
  1281.                Data->Friday = (NewDays & DAY_FRI) ? TRUE : FALSE;
  1282.                Data->Saturday = (NewDays & DAY_SAT) ? TRUE : FALSE;
  1283.                Data->Hour = (UCHAR)(NewStart / 60);
  1284.                Data->Minute = (UCHAR)(NewStart % 60);
  1285.                Data->Length = NewLength;
  1286.                Data->Add ();
  1287.             }
  1288.             break;
  1289.          }
  1290.          case 116:
  1291.             if (MessageBox ("Delete Event", "Are you really sure ?") == TRUE)
  1292.                Data->Delete ();
  1293.             break;
  1294.          case 118:
  1295.             Data->Previous ();
  1296.             break;
  1297.          case 119:
  1298.             Data->Next ();
  1299.             break;
  1300.          case 996:
  1301.             Data->Update ();
  1302.             Data->Save ();
  1303.             break;
  1304.       }
  1305.    } while (menu_sel != -1);
  1306.  
  1307.    wclose ();
  1308.  
  1309.    if (Data != NULL)
  1310.       delete Data;
  1311.  
  1312.    return (RetVal);
  1313. }
  1314.  
  1315. // ----------------------------------------------------------------------
  1316.  
  1317. USHORT CExternalProcDlg (VOID)
  1318. {
  1319.    int menu_sel = 996;
  1320.    USHORT RetVal = FALSE;
  1321.  
  1322.    wopen (8, 5, 17, 73, 1, WHITE|_LGREY, WHITE|_LGREY);
  1323.    wshadow (DGREY|_BLACK);
  1324.    wtitle (" External Processing ", TCENTER, WHITE|_LGREY);
  1325.  
  1326.    DisplayButton (6, 2, "   Ok   ");
  1327.    DisplayButton (6, 12, " Cancel ");
  1328.    DisplayButton (6, 22, "  Help  ");
  1329.  
  1330.    do {
  1331.       wmenubegc ();
  1332.       wmenuitem (0, 1, " Import      ", 0, 1, 0, NULL, 0, 0);
  1333.       wmenuitem (1, 1, " Export      ", 0, 2, 0, NULL, 0, 0);
  1334.       wmenuitem (2, 1, " Pack        ", 0, 3, 0, NULL, 0, 0);
  1335.       wmenuitem (3, 1, " Single Pass ", 0, 4, 0, NULL, 0, 0);
  1336.       wmenuitem (4, 1, " Newsgroups  ", 0, 5, 0, NULL, 0, 0);
  1337.       wmenuitem (6, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  1338.       wmenuitem (6, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  1339.       wmenuitem (6, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  1340.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  1341.  
  1342.       DisplayTextField (0, 15, Cfg->ImportCmd, sizeof (Cfg->ImportCmd), 71);
  1343.       DisplayTextField (1, 15, Cfg->ExportCmd, sizeof (Cfg->ExportCmd), 71);
  1344.       DisplayTextField (2, 15, Cfg->PackCmd, sizeof (Cfg->PackCmd), 71);
  1345.       DisplayTextField (3, 15, Cfg->SinglePassCmd, sizeof (Cfg->SinglePassCmd), 71);
  1346.       DisplayTextField (4, 15, Cfg->NewsgroupCmd, sizeof (Cfg->NewsgroupCmd), 71);
  1347.  
  1348.       switch (menu_sel = wmenuget ()) {
  1349.          case 1:
  1350.             GetTextField (0, 15, Cfg->ImportCmd, sizeof (Cfg->ImportCmd), 71);
  1351.             break;
  1352.          case 2:
  1353.             GetTextField (1, 15, Cfg->ExportCmd, sizeof (Cfg->ExportCmd), 71);
  1354.             break;
  1355.          case 3:
  1356.             GetTextField (2, 15, Cfg->PackCmd, sizeof (Cfg->PackCmd), 71);
  1357.             break;
  1358.          case 4:
  1359.             GetTextField (3, 15, Cfg->SinglePassCmd, sizeof (Cfg->SinglePassCmd), 71);
  1360.             break;
  1361.          case 5:
  1362.             GetTextField (4, 15, Cfg->NewsgroupCmd, sizeof (Cfg->NewsgroupCmd), 71);
  1363.             break;
  1364.          case 996:
  1365.             RetVal = TRUE;
  1366.             break;
  1367.          case 997:
  1368.             RetVal = FALSE;
  1369.             break;
  1370.       }
  1371.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  1372.  
  1373.    wclose ();
  1374.  
  1375.    return (RetVal);
  1376. }
  1377.  
  1378. // ----------------------------------------------------------------------
  1379.  
  1380. USHORT CGeneralOptDlg (VOID)
  1381. {
  1382.    int menu_sel = 996;
  1383.    CHAR Temp[64];
  1384.    USHORT RetVal = FALSE;
  1385.  
  1386.    wopen (7, 5, 18, 73, 1, WHITE|_LGREY, WHITE|_LGREY);
  1387.    wshadow (DGREY|_BLACK);
  1388.    wtitle (" General Options ", TCENTER, WHITE|_LGREY);
  1389.  
  1390.    DisplayButton (8, 2, "   Ok   ");
  1391.    DisplayButton (8, 12, " Cancel ");
  1392.    DisplayButton (8, 22, "  Help  ");
  1393.  
  1394.    do {
  1395.       wmenubegc ();
  1396.       wmenuitem (0, 1, " Task Number   ", 0, 1, 0, NULL, 0, 0);
  1397.       wmenuitem (1, 1, " Log File      ", 0, 2, 0, NULL, 0, 0);
  1398.       wmenuitem (2, 1, " Events File   ", 0, 3, 0, NULL, 0, 0);
  1399.       wmenuitem (3, 1, " Fax Command   ", 0, 4, 0, NULL, 0, 0);
  1400.       wmenuitem (4, 1, " After Caller  ", 0, 5, 0, NULL, 0, 0);
  1401.       wmenuitem (5, 1, " After Mail    ", 0, 6, 0, NULL, 0, 0);
  1402.       wmenuitem (6, 1, " ZModem Telnet ", 0, 7, 0, NULL, 0, 0);
  1403.       wmenuitem (8, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  1404.       wmenuitem (8, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  1405.       wmenuitem (8, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  1406.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  1407.  
  1408.       sprintf (Temp, "%u", Cfg->TaskNumber);
  1409.       DisplayTextField (0, 17, Temp, 5, 5);
  1410.       DisplayTextField (1, 17, Cfg->LogFile, sizeof (Cfg->LogFile), 49);
  1411.       DisplayTextField (2, 17, Cfg->SchedulerFile, sizeof (Cfg->SchedulerFile), 49);
  1412.       DisplayTextField (3, 17, Cfg->FaxCommand, sizeof (Cfg->FaxCommand), 49);
  1413.       DisplayTextField (4, 17, Cfg->AfterCallerCmd, sizeof (Cfg->AfterCallerCmd), 49);
  1414.       DisplayTextField (5, 17, Cfg->AfterMailCmd, sizeof (Cfg->AfterMailCmd), 49);
  1415.       wprints (6, 17, WHITE|_BLUE, (Cfg->ZModemTelnet == TRUE) ? "Yes" : "No ");
  1416.  
  1417.       switch (menu_sel = wmenuget ()) {
  1418.          case 1:
  1419.             sprintf (Temp, "%u", Cfg->TaskNumber);
  1420.             GetTextField (0, 17, Temp, 5, 5);
  1421.             Cfg->TaskNumber = (USHORT)atoi (Temp);
  1422.             break;
  1423.          case 2:
  1424.             GetTextField (1, 17, Cfg->LogFile, sizeof (Cfg->LogFile), 49);
  1425.             break;
  1426.          case 3:
  1427.             GetTextField (2, 17, Cfg->SchedulerFile, sizeof (Cfg->SchedulerFile), 49);
  1428.             break;
  1429.          case 4:
  1430.             GetTextField (3, 17, Cfg->FaxCommand, sizeof (Cfg->FaxCommand), 49);
  1431.             break;
  1432.          case 5:
  1433.             GetTextField (4, 17, Cfg->AfterCallerCmd, sizeof (Cfg->AfterCallerCmd), 49);
  1434.             break;
  1435.          case 6:
  1436.             GetTextField (5, 17, Cfg->AfterMailCmd, sizeof (Cfg->AfterMailCmd), 49);
  1437.             break;
  1438.          case 7:
  1439.             Cfg->ZModemTelnet = (Cfg->ZModemTelnet == TRUE) ? FALSE : TRUE;
  1440.             break;
  1441.          case 996:
  1442.             RetVal = TRUE;
  1443.             break;
  1444.          case 997:
  1445.             RetVal = FALSE;
  1446.             break;
  1447.       }
  1448.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  1449.  
  1450.    wclose ();
  1451.  
  1452.    return (RetVal);
  1453. }
  1454.  
  1455. USHORT CHardwareDlg (VOID)
  1456. {
  1457.    int menu_sel = 996;
  1458.    CHAR Temp[64];
  1459.    USHORT RetVal = FALSE;
  1460.  
  1461.    wopen (6, 12, 18, 66, 1, WHITE|_LGREY, WHITE|_LGREY);
  1462.    wshadow (DGREY|_BLACK);
  1463.    wtitle (" Modem Hardware ", TCENTER, WHITE|_LGREY);
  1464.  
  1465.    DisplayButton (9, 2, "   Ok   ");
  1466.    DisplayButton (9, 12, " Cancel ");
  1467.    DisplayButton (9, 22, "  Help  ");
  1468.  
  1469.    do {
  1470.       wmenubegc ();
  1471.       wmenuitem (0, 1, " Modem Port       ", 0, 1, 0, NULL, 0, 0);
  1472.       wmenuitem (1, 1, " Baud Rate        ", 0, 2, 0, NULL, 0, 0);
  1473.       wmenuitem (2, 1, " Lock Speed       ", 0, 3, 0, NULL, 0, 0);
  1474.       wmenuitem (3, 1, " Strip Dashes     ", 0, 4, 0, NULL, 0, 0);
  1475.       wmenuitem (4, 1, " Fax Message      ", 0, 5, 0, NULL, 0, 0);
  1476.       wmenuitem (5, 1, " Ring Message     ", 0, 6, 0, NULL, 0, 0);
  1477.       wmenuitem (6, 1, " Dial Timeout     ", 0, 7, 0, NULL, 0, 0);
  1478.       wmenuitem (7, 1, " DCD Drop Timeout ", 0, 8, 0, NULL, 0, 0);
  1479.       wmenuitem (9, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  1480.       wmenuitem (9, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  1481.       wmenuitem (9, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  1482.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  1483.  
  1484.       DisplayTextField (0, 20, Cfg->Device, sizeof (Cfg->Device), 32);
  1485.       sprintf (Temp, "%lu", Cfg->Speed);
  1486.       DisplayTextField (1, 20, Temp, 6, 6);
  1487.       wprints (2, 20, WHITE|_BLUE, (Cfg->LockSpeed == TRUE) ? "Yes" : "No ");
  1488.       wprints (3, 20, WHITE|_BLUE, (Cfg->StripDashes == TRUE) ? "Yes" : "No ");
  1489.       DisplayTextField (4, 20, Cfg->FaxMessage, sizeof (Cfg->FaxMessage), 32);
  1490.       DisplayTextField (5, 20, Cfg->Ring, sizeof (Cfg->Ring), 32);
  1491.       sprintf (Temp, "%u", Cfg->DialTimeout);
  1492.       DisplayTextField (6, 20, Temp, 6, 6);
  1493.       sprintf (Temp, "%lu", Cfg->CarrierDropTimeout);
  1494.       DisplayTextField (7, 20, Temp, 6, 6);
  1495.  
  1496.       switch (menu_sel = wmenuget ()) {
  1497.          case 1:
  1498.             GetTextField (0, 20, Cfg->Device, sizeof (Cfg->Device), 32);
  1499.             break;
  1500.          case 2:
  1501.             sprintf (Temp, "%lu", Cfg->Speed);
  1502.             GetTextField (1, 20, Temp, 6, 6);
  1503.             Cfg->Speed = atol (Temp);
  1504.             break;
  1505.          case 3:
  1506.             Cfg->LockSpeed = (Cfg->LockSpeed == TRUE) ? FALSE : TRUE;
  1507.             break;
  1508.          case 4:
  1509.             Cfg->StripDashes = (Cfg->StripDashes == TRUE) ? FALSE : TRUE;
  1510.             break;
  1511.          case 5:
  1512.             GetTextField (4, 20, Cfg->FaxMessage, sizeof (Cfg->FaxMessage), 32);
  1513.             break;
  1514.          case 6:
  1515.             GetTextField (5, 20, Cfg->Ring, sizeof (Cfg->Ring), 32);
  1516.             break;
  1517.          case 7:
  1518.             sprintf (Temp, "%u", Cfg->DialTimeout);
  1519.             GetTextField (6, 20, Temp, 6, 6);
  1520.             Cfg->DialTimeout = (USHORT)atoi (Temp);
  1521.             break;
  1522.          case 8:
  1523.             sprintf (Temp, "%lu", Cfg->CarrierDropTimeout);
  1524.             GetTextField (7, 20, Temp, 6, 6);
  1525.             Cfg->CarrierDropTimeout = (USHORT)atoi (Temp);
  1526.             break;
  1527.          case 996:
  1528.             RetVal = TRUE;
  1529.             break;
  1530.          case 997:
  1531.             RetVal = FALSE;
  1532.             break;
  1533.       }
  1534.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  1535.  
  1536.    wclose ();
  1537.  
  1538.    return (RetVal);
  1539. }
  1540.  
  1541. USHORT CFaxDlg (VOID)
  1542. {
  1543.    int menu_sel = 996;
  1544.    USHORT RetVal = FALSE;
  1545.  
  1546.    wopen (8, 2, 16, 76, 1, WHITE|_LGREY, WHITE|_LGREY);
  1547.    wshadow (DGREY|_BLACK);
  1548.    wtitle (" Fax Options ", TCENTER, WHITE|_LGREY);
  1549.  
  1550.    DisplayButton (5, 2, "   Ok   ");
  1551.    DisplayButton (5, 12, " Cancel ");
  1552.    DisplayButton (5, 22, "  Help  ");
  1553.  
  1554.    do {
  1555.       wmenubegc ();
  1556.       wmenuitem (0, 1, " Use external recv. ", 0, 1, 0, NULL, 0, 0);
  1557.       wmenuitem (1, 1, " External receiver  ", 0, 2, 0, NULL, 0, 0);
  1558.       wmenuitem (2, 1, " Receive path       ", 0, 3, 0, NULL, 0, 0);
  1559.       wmenuitem (3, 1, " After receive cmd. ", 0, 4, 0, NULL, 0, 0);
  1560.       wmenuitem (5, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  1561.       wmenuitem (5, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  1562.       wmenuitem (5, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  1563.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  1564.  
  1565.       wprints (0, 22, WHITE|_BLUE, (Cfg->ExternalFax == TRUE) ? "Yes" : "No ");
  1566.       DisplayTextField (1, 22, Cfg->FaxCommand, sizeof (Cfg->FaxCommand), 50);
  1567.       DisplayTextField (2, 22, Cfg->FaxPath, sizeof (Cfg->FaxPath), 50);
  1568.       DisplayTextField (3, 22, Cfg->AfterFaxCmd, sizeof (Cfg->AfterFaxCmd), 50);
  1569.  
  1570.       switch (menu_sel = wmenuget ()) {
  1571.          case 1:
  1572.             Cfg->ExternalFax = (Cfg->ExternalFax == TRUE) ? FALSE : TRUE;
  1573.             break;
  1574.          case 2:
  1575.             GetTextField (1, 22, Cfg->FaxCommand, sizeof (Cfg->FaxCommand), 50);
  1576.             break;
  1577.          case 3:
  1578.             GetTextField (2, 22, Cfg->FaxPath, sizeof (Cfg->FaxPath), 50);
  1579.             break;
  1580.          case 4:
  1581.             GetTextField (3, 22, Cfg->AfterFaxCmd, sizeof (Cfg->AfterFaxCmd), 50);
  1582.             break;
  1583.          case 996:
  1584.             RetVal = TRUE;
  1585.             break;
  1586.          case 997:
  1587.             RetVal = FALSE;
  1588.             break;
  1589.       }
  1590.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  1591.  
  1592.    wclose ();
  1593.  
  1594.    return (RetVal);
  1595. }
  1596.  
  1597. USHORT CInternetDlg (VOID)
  1598. {
  1599.    short menu_sel = 996;
  1600.    CHAR Temp[16];
  1601.    USHORT RetVal = FALSE;
  1602.  
  1603.    wopen (8, 6, 19, 71, 1, WHITE|_LGREY, WHITE|_LGREY);
  1604.    wshadow (DGREY|_BLACK);
  1605.    wtitle (" Internet Options ", TCENTER, WHITE|_LGREY);
  1606.  
  1607.    DisplayButton (8, 2, "   Ok   ");
  1608.    DisplayButton (8, 12, " Cancel ");
  1609.    DisplayButton (8, 22, "  Help  ");
  1610.  
  1611.    do {
  1612.       wmenubegc ();
  1613.       wmenuitem (0, 1, " Host Name   ", 0, 1, 0, NULL, 0, 0);
  1614.       wmenuitem (1, 1, " News Server ", 0, 2, 0, NULL, 0, 0);
  1615.       wmenuitem (2, 1, " Mail Server ", 0, 3, 0, NULL, 0, 0);
  1616.       wmenuitem (3, 1, " Enable PPP  ", 0, 4, 0, NULL, 0, 0);
  1617.       wmenuitem (4, 1, " Time Limit  ", 0, 5, 0, NULL, 0, 0);
  1618.       wmenuitem (5, 1, " Command     ", 0, 6, 0, NULL, 0, 0);
  1619.       wmenuitem (6, 1, " Max Msgs.   ", 0, 7, 0, NULL, 0, 0);
  1620.       wmenuitem (8, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  1621.       wmenuitem (8, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  1622.       wmenuitem (8, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  1623.       wmenuend (menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  1624.  
  1625.       DisplayTextField (0, 15, Cfg->HostName, sizeof (Cfg->HostName), 48);
  1626.       DisplayTextField (1, 15, Cfg->NewsServer, sizeof (Cfg->NewsServer), 48);
  1627.       DisplayTextField (2, 15, Cfg->MailServer, sizeof (Cfg->MailServer), 48);
  1628.       wprints (3, 15, WHITE|_BLUE, (Cfg->EnablePPP == TRUE) ? "Yes" : "No ");
  1629.       sprintf (Temp, "%u", Cfg->PPPTimeLimit);
  1630.       DisplayTextField (4, 15, Temp, 5, 5);
  1631.       DisplayTextField (5, 15, Cfg->PPPCmd, sizeof (Cfg->PPPCmd), 48);
  1632.       sprintf (Temp, "%u", Cfg->RetriveMaxMessages);
  1633.       DisplayTextField (6, 15, Temp, 5, 5);
  1634.  
  1635.       switch (menu_sel = wmenuget ()) {
  1636.          case 1:
  1637.             GetTextField (0, 15, Cfg->HostName, sizeof (Cfg->HostName), 49);
  1638.             break;
  1639.          case 2:
  1640.             GetTextField (1, 15, Cfg->NewsServer, sizeof (Cfg->NewsServer), 49);
  1641.             break;
  1642.          case 3:
  1643.             GetTextField (2, 15, Cfg->MailServer, sizeof (Cfg->MailServer), 49);
  1644.             break;
  1645.          case 4:
  1646.             Cfg->EnablePPP = (Cfg->EnablePPP == TRUE) ? FALSE : TRUE;
  1647.             break;
  1648.          case 5:
  1649.             sprintf (Temp, "%u", Cfg->PPPTimeLimit);
  1650.             GetTextField (4, 15, Temp, 5, 5);
  1651.             Cfg->PPPTimeLimit = (USHORT)atoi (Temp);
  1652.             break;
  1653.          case 6:
  1654.             GetTextField (5, 15, Cfg->PPPCmd, sizeof (Cfg->PPPCmd), 49);
  1655.             break;
  1656.          case 7:
  1657.             sprintf (Temp, "%u", Cfg->RetriveMaxMessages);
  1658.             GetTextField (6, 15, Temp, 5, 5);
  1659.             Cfg->RetriveMaxMessages = (USHORT)atoi (Temp);
  1660.             break;
  1661.          case 996:
  1662.             RetVal = TRUE;
  1663.             break;
  1664.          case 997:
  1665.             RetVal = FALSE;
  1666.             break;
  1667.       }
  1668.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  1669.  
  1670.    wclose ();
  1671.  
  1672.    return (RetVal);
  1673. }
  1674.  
  1675. USHORT CMailerMiscDlg (VOID)
  1676. {
  1677.    int menu_sel = 996;
  1678.    USHORT RetVal = FALSE;
  1679.  
  1680.    wopen (8, 5, 17, 73, 1, WHITE|_LGREY, WHITE|_LGREY);
  1681.    wshadow (DGREY|_BLACK);
  1682.    wtitle (" Miscellaneous ", TCENTER, WHITE|_LGREY);
  1683.  
  1684.    DisplayButton (6, 2, "   Ok   ");
  1685.    DisplayButton (6, 12, " Cancel ");
  1686.    DisplayButton (6, 22, "  Help  ");
  1687.  
  1688.    do {
  1689.       wmenubegc ();
  1690.       wmenuitem (0, 1, " Mail-only ", 0, 1, 0, NULL, 0, 0);
  1691.       wmenuitem (1, 1, " Enter-BBS ", 0, 2, 0, NULL, 0, 0);
  1692.       wmenuitem (2, 1, " WaZOO     ", 0, 3, 0, NULL, 0, 0);
  1693.       wmenuitem (2, 17, " Secure Mail   ", 0, 4, 0, NULL, 0, 0);
  1694.       wmenuitem (3, 1, " EMSI      ", 0, 5, 0, NULL, 0, 0);
  1695.       wmenuitem (3, 17, " Keep Netmail  ", 0, 6, 0, NULL, 0, 0);
  1696.       wmenuitem (4, 1, " Janus     ", 0, 7, 0, NULL, 0, 0);
  1697.       wmenuitem (4, 17, " Track Netmail ", 0, 8, 0, NULL, 0, 0);
  1698.       wmenuitem (6, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  1699.       wmenuitem (6, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  1700.       wmenuitem (6, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  1701.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  1702.  
  1703.       DisplayTextField (0, 13, Cfg->MailOnly, sizeof (Cfg->MailOnly), 53);
  1704.       DisplayTextField (1, 13, Cfg->EnterBBS, sizeof (Cfg->EnterBBS), 53);
  1705.       wprints (2, 13, WHITE|_BLUE, (Cfg->WaZoo == TRUE) ? "Yes" : "No ");
  1706.       wprints (2, 33, WHITE|_BLUE, (Cfg->Secure == TRUE) ? "Yes" : "No ");
  1707.       wprints (3, 13, WHITE|_BLUE, (Cfg->EMSI == TRUE) ? "Yes" : "No ");
  1708.       wprints (3, 33, WHITE|_BLUE, (Cfg->KeepNetMail == TRUE) ? "Yes" : "No ");
  1709.       wprints (4, 13, WHITE|_BLUE, (Cfg->Janus == TRUE) ? "Yes" : "No ");
  1710.       wprints (4, 33, WHITE|_BLUE, (Cfg->TrackNetMail == TRUE) ? "Yes" : "No ");
  1711.  
  1712.       switch (menu_sel = wmenuget ()) {
  1713.          case 1:
  1714.             GetTextField (0, 13, Cfg->MailOnly, sizeof (Cfg->MailOnly), 53);
  1715.             break;
  1716.          case 2:
  1717.             GetTextField (1, 13, Cfg->EnterBBS, sizeof (Cfg->EnterBBS), 53);
  1718.             break;
  1719.          case 3:
  1720.             Cfg->WaZoo = (Cfg->WaZoo == TRUE) ? FALSE : TRUE;
  1721.             break;
  1722.          case 4:
  1723.             Cfg->Secure = (Cfg->Secure == TRUE) ? FALSE : TRUE;
  1724.             break;
  1725.          case 5:
  1726.             Cfg->EMSI = (Cfg->EMSI == TRUE) ? FALSE : TRUE;
  1727.             break;
  1728.          case 6:
  1729.             Cfg->KeepNetMail = (Cfg->KeepNetMail == TRUE) ? FALSE : TRUE;
  1730.             break;
  1731.          case 7:
  1732.             Cfg->Janus = (Cfg->Janus == TRUE) ? FALSE : TRUE;
  1733.             break;
  1734.          case 8:
  1735.             Cfg->TrackNetMail = (Cfg->TrackNetMail == TRUE) ? FALSE : TRUE;
  1736.             break;
  1737.          case 996:
  1738.             RetVal = TRUE;
  1739.             break;
  1740.          case 997:
  1741.             RetVal = FALSE;
  1742.             break;
  1743.       }
  1744.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  1745.  
  1746.    wclose ();
  1747.  
  1748.    return (RetVal);
  1749. }
  1750.  
  1751. USHORT CMailProcessingDlg (VOID)
  1752. {
  1753.    int menu_sel = 996;
  1754.    CHAR Temp[16];
  1755.    USHORT RetVal = FALSE;
  1756.  
  1757.    wopen (6, 4, 20, 75, 1, WHITE|_LGREY, WHITE|_LGREY);
  1758.    wshadow (DGREY|_BLACK);
  1759.    wtitle (" Mail Processing ", TCENTER, WHITE|_LGREY);
  1760.  
  1761.    DisplayButton (11, 2, "   Ok   ");
  1762.    DisplayButton (11, 12, " Cancel ");
  1763.    DisplayButton (11, 22, "  Help  ");
  1764.  
  1765.    do {
  1766.       wmenubegc ();
  1767.       wmenuitem (0, 1, " NetMail Storage  ", 0, 1, 0, NULL, 0, 0);
  1768.       wmenuitem (0, 37, " Board ", 0, 13, 0, NULL, 0, 0);
  1769.       wmenuitem (1, 1, " NetMail Path     ", 0, 2, 0, NULL, 0, 0);
  1770.       wmenuitem (2, 1, " Dupes Storage    ", 0, 3, 0, NULL, 0, 0);
  1771.       wmenuitem (2, 37, " Board ", 0, 14, 0, NULL, 0, 0);
  1772.       wmenuitem (3, 1, " Dupes Path       ", 0, 4, 0, NULL, 0, 0);
  1773.       wmenuitem (4, 1, " Bad Storage      ", 0, 5, 0, NULL, 0, 0);
  1774.       wmenuitem (4, 37, " Board ", 0, 15, 0, NULL, 0, 0);
  1775.       wmenuitem (5, 1, " Bad Path         ", 0, 6, 0, NULL, 0, 0);
  1776.       wmenuitem (6, 1, " Import Empty     ", 0, 7, 0, NULL, 0, 0);
  1777.       wmenuitem (6, 24, " Separate NetMail ", 0, 8, 0, NULL, 0, 0);
  1778.       wmenuitem (7, 1, " Force INTL       ", 0, 9, 0, NULL, 0, 0);
  1779.       wmenuitem (7, 24, " Single Pass      ", 0, 10, 0, NULL, 0, 0);
  1780.       wmenuitem (8, 1, " Replace Tearline ", 0, 11, 0, NULL, 0, 0);
  1781.       wmenuitem (9, 1, " Tearline         ", 0, 12, 0, NULL, 0, 0);
  1782.       wmenuitem (11, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  1783.       wmenuitem (11, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  1784.       wmenuitem (11, 22, "  Help  ", 'H', 998, M_NOSEL, NULL, 0, 0);
  1785.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  1786.  
  1787.       switch (Cfg->NetMailStorage) {
  1788.          case ST_JAM:
  1789.             wprints (0, 20, WHITE|_BLUE, "JAM             ");
  1790.             break;
  1791.          case ST_SQUISH:
  1792.             wprints (0, 20, WHITE|_BLUE, "Squish          ");
  1793.             break;
  1794.          case ST_FIDO:
  1795.             wprints (0, 20, WHITE|_BLUE, "Fido *.MSG      ");
  1796.             break;
  1797.          case ST_ADEPT:
  1798.             wprints (0, 20, WHITE|_BLUE, "AdeptXBBS       ");
  1799.             break;
  1800.          case ST_HUDSON:
  1801.             wprints (0, 20, WHITE|_BLUE, "Hudson (QBBS)   ");
  1802.             break;
  1803.       }
  1804.       sprintf (Temp, "%u", Cfg->NetMailBoard);
  1805.       DisplayTextField (0, 45, Temp, 5, 5);
  1806.       DisplayTextField (1, 20, Cfg->NetMailPath, sizeof (Cfg->NetMailPath), 49);
  1807.       switch (Cfg->DupeStorage) {
  1808.          case ST_JAM:
  1809.             wprints (2, 20, WHITE|_BLUE, "JAM             ");
  1810.             break;
  1811.          case ST_SQUISH:
  1812.             wprints (2, 20, WHITE|_BLUE, "Squish          ");
  1813.             break;
  1814.          case ST_FIDO:
  1815.             wprints (2, 20, WHITE|_BLUE, "Fido *.MSG      ");
  1816.             break;
  1817.          case ST_ADEPT:
  1818.             wprints (2, 20, WHITE|_BLUE, "AdeptXBBS       ");
  1819.             break;
  1820.          case ST_HUDSON:
  1821.             wprints (2, 20, WHITE|_BLUE, "Hudson (QBBS)   ");
  1822.             break;
  1823.       }
  1824.       sprintf (Temp, "%u", Cfg->DupeBoard);
  1825.       DisplayTextField (2, 45, Temp, 5, 5);
  1826.       DisplayTextField (3, 20, Cfg->DupePath, sizeof (Cfg->DupePath), 49);
  1827.       switch (Cfg->BadStorage) {
  1828.          case ST_JAM:
  1829.             wprints (4, 20, WHITE|_BLUE, "JAM             ");
  1830.             break;
  1831.          case ST_SQUISH:
  1832.             wprints (4, 20, WHITE|_BLUE, "Squish          ");
  1833.             break;
  1834.          case ST_FIDO:
  1835.             wprints (4, 20, WHITE|_BLUE, "Fido *.MSG      ");
  1836.             break;
  1837.          case ST_ADEPT:
  1838.             wprints (4, 20, WHITE|_BLUE, "AdeptXBBS       ");
  1839.             break;
  1840.          case ST_HUDSON:
  1841.             wprints (4, 20, WHITE|_BLUE, "Hudson (QBBS)   ");
  1842.             break;
  1843.       }
  1844.       sprintf (Temp, "%u", Cfg->BadBoard);
  1845.       DisplayTextField (4, 45, Temp, 5, 5);
  1846.       DisplayTextField (5, 20, Cfg->BadPath, sizeof (Cfg->BadPath), 49);
  1847.       wprints (6, 20, WHITE|_BLUE, (Cfg->ImportEmpty == TRUE) ? "Yes" : "No ");
  1848.       wprints (6, 43, WHITE|_BLUE, (Cfg->SeparateNetMail == TRUE) ? "Yes" : "No ");
  1849.       wprints (7, 20, WHITE|_BLUE, (Cfg->ForceIntl == TRUE) ? "Yes" : "No ");
  1850.       wprints (7, 43, WHITE|_BLUE, (Cfg->UseSinglePass == TRUE) ? "Yes" : "No ");
  1851.       wprints (8, 20, WHITE|_BLUE, (Cfg->ReplaceTear == TRUE) ? "Yes" : "No ");
  1852.       DisplayTextField (9, 20, Cfg->TearLine, sizeof (Cfg->TearLine), 49);
  1853.  
  1854.       switch (menu_sel = wmenuget ()) {
  1855.          case 1:
  1856.             switch (Cfg->NetMailStorage) {
  1857.                case ST_JAM:
  1858.                   Cfg->NetMailStorage = ST_SQUISH;
  1859.                   break;
  1860.                case ST_SQUISH:
  1861.                   Cfg->NetMailStorage = ST_FIDO;
  1862.                   break;
  1863.                case ST_FIDO:
  1864.                   Cfg->NetMailStorage = ST_ADEPT;
  1865.                   break;
  1866.                case ST_ADEPT:
  1867.                   Cfg->NetMailStorage = ST_HUDSON;
  1868.                   break;
  1869.                case ST_HUDSON:
  1870.                   Cfg->NetMailStorage = ST_JAM;
  1871.                   break;
  1872.             }
  1873.             break;
  1874.          case 2:
  1875.             GetTextField (1, 20, Cfg->NetMailPath, sizeof (Cfg->NetMailPath), 49);
  1876.             break;
  1877.          case 3:
  1878.             switch (Cfg->DupeStorage) {
  1879.                case ST_JAM:
  1880.                   Cfg->DupeStorage = ST_SQUISH;
  1881.                   break;
  1882.                case ST_SQUISH:
  1883.                   Cfg->DupeStorage = ST_FIDO;
  1884.                   break;
  1885.                case ST_FIDO:
  1886.                   Cfg->DupeStorage = ST_ADEPT;
  1887.                   break;
  1888.                case ST_ADEPT:
  1889.                   Cfg->DupeStorage = ST_HUDSON;
  1890.                   break;
  1891.                case ST_HUDSON:
  1892.                   Cfg->DupeStorage = ST_JAM;
  1893.                   break;
  1894.             }
  1895.             break;
  1896.          case 4:
  1897.             GetTextField (3, 20, Cfg->DupePath, sizeof (Cfg->DupePath), 49);
  1898.             break;
  1899.          case 5:
  1900.             switch (Cfg->BadStorage) {
  1901.                case ST_JAM:
  1902.                   Cfg->BadStorage = ST_SQUISH;
  1903.                   break;
  1904.                case ST_SQUISH:
  1905.                   Cfg->BadStorage = ST_FIDO;
  1906.                   break;
  1907.                case ST_FIDO:
  1908.                   Cfg->BadStorage = ST_ADEPT;
  1909.                   break;
  1910.                case ST_ADEPT:
  1911.                   Cfg->BadStorage = ST_HUDSON;
  1912.                   break;
  1913.                case ST_HUDSON:
  1914.                   Cfg->BadStorage = ST_JAM;
  1915.                   break;
  1916.             }
  1917.             break;
  1918.          case 6:
  1919.             GetTextField (5, 20, Cfg->BadPath, sizeof (Cfg->BadPath), 49);
  1920.             break;
  1921.          case 7:
  1922.             Cfg->ImportEmpty = (Cfg->ImportEmpty == TRUE) ? FALSE : TRUE;
  1923.             break;
  1924.          case 8:
  1925.             Cfg->SeparateNetMail = (Cfg->SeparateNetMail == TRUE) ? FALSE : TRUE;
  1926.             break;
  1927.          case 9:
  1928.             Cfg->ForceIntl = (Cfg->ForceIntl == TRUE) ? FALSE : TRUE;
  1929.             break;
  1930.          case 10:
  1931.             Cfg->UseSinglePass = (Cfg->UseSinglePass == TRUE) ? FALSE : TRUE;
  1932.             break;
  1933.          case 11:
  1934.             Cfg->ReplaceTear = (Cfg->ReplaceTear == TRUE) ? FALSE : TRUE;
  1935.             break;
  1936.          case 12:
  1937.             GetTextField (9, 20, Cfg->TearLine, sizeof (Cfg->TearLine), 49);
  1938.             break;
  1939.          case 13:
  1940.             sprintf (Temp, "%u", Cfg->NetMailBoard);
  1941.             GetTextField (0, 45, Temp, 5, 5);
  1942.             Cfg->NetMailBoard = (USHORT)atoi (Temp);
  1943.             break;
  1944.          case 14:
  1945.             sprintf (Temp, "%u", Cfg->DupeBoard);
  1946.             GetTextField (2, 45, Temp, 5, 5);
  1947.             Cfg->DupeBoard = (USHORT)atoi (Temp);
  1948.             break;
  1949.          case 15:
  1950.             sprintf (Temp, "%u", Cfg->BadBoard);
  1951.             GetTextField (4, 45, Temp, 5, 5);
  1952.             Cfg->BadBoard = (USHORT)atoi (Temp);
  1953.             break;
  1954.          case 996:
  1955.             RetVal = TRUE;
  1956.             break;
  1957.          case 997:
  1958.             RetVal = FALSE;
  1959.             break;
  1960.       }
  1961.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  1962.  
  1963.    wclose ();
  1964.  
  1965.    return (RetVal);
  1966. }
  1967.  
  1968. // ----------------------------------------------------------------------
  1969.  
  1970. USHORT CAddNodeDlg (PSZ Address, PSZ System, PSZ Sysop)
  1971. {
  1972.    int menu_sel = 996;
  1973.    USHORT RetVal = FALSE;
  1974.  
  1975.    wopen (9, 6, 16, 72, 1, WHITE|_LGREY, WHITE|_LGREY);
  1976.    wshadow (DGREY|_BLACK);
  1977.    wtitle (" Add Node ", TCENTER, WHITE|_LGREY);
  1978.  
  1979.    DisplayButton (4, 2, "   Ok   ");
  1980.    DisplayButton (4, 12, " Cancel ");
  1981.    DisplayButton (4, 22, "  Help  ");
  1982.  
  1983.    do {
  1984.       wmenubegc ();
  1985.       wmenuitem (0, 1, " Address     ", 0, 1, 0, NULL, 0, 0);
  1986.       wmenuitem (1, 1, " System Name ", 0, 2, 0, NULL, 0, 0);
  1987.       wmenuitem (2, 1, " Sysop Name  ", 0, 3, 0, NULL, 0, 0);
  1988.       wmenuitem (4, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  1989.       wmenuitem (4, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  1990.       wmenuitem (4, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  1991.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  1992.  
  1993.       DisplayTextField (0, 15, Address, 31, 31);
  1994.       DisplayTextField (1, 15, System, 54, 54);
  1995.       DisplayTextField (2, 15, Sysop, 54, 54);
  1996.  
  1997.       switch (menu_sel = wmenuget ()) {
  1998.          case 1:
  1999.             GetTextField (0, 15, Address, 31, 31);
  2000.             break;
  2001.          case 2:
  2002.             GetTextField (1, 15, System, 49, 49);
  2003.             break;
  2004.          case 3:
  2005.             GetTextField (2, 15, Sysop, 31, 31);
  2006.             break;
  2007.          case 996:
  2008.             RetVal = TRUE;
  2009.             break;
  2010.          case 997:
  2011.             RetVal = FALSE;
  2012.             break;
  2013.       }
  2014.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  2015.  
  2016.    wclose ();
  2017.  
  2018.    return (RetVal);
  2019. }
  2020.  
  2021. USHORT COtherNodeDlg (class TNodes *Data)
  2022. {
  2023.    int menu_sel = 996;
  2024.    USHORT RetVal = FALSE;
  2025.  
  2026.    wopen (8, 8, 17, 70, 1, WHITE|_LGREY, WHITE|_LGREY);
  2027.    wshadow (DGREY|_BLACK);
  2028.    wtitle (" Other Node Options ", TCENTER, WHITE|_LGREY);
  2029.  
  2030.    DisplayButton (6, 2, "   Ok   ");
  2031.    DisplayButton (6, 12, " Cancel ");
  2032.    DisplayButton (6, 22, "  Help  ");
  2033.  
  2034.    do {
  2035.       wmenubegc ();
  2036.       wmenuitem (0, 1, " Dial Command       ", 0, 1, 0, NULL, 0, 0);
  2037.       wmenuitem (1, 1, " E-Mail Address     ", 0, 2, 0, NULL, 0, 0);
  2038.       wmenuitem (2, 1, " Import E-Mail      ", 0, 3, 0, NULL, 0, 0);
  2039.       wmenuitem (3, 1, " POP3 Password      ", 0, 4, 0, NULL, 0, 0);
  2040.       wmenuitem (4, 1, " Use E-Mail Address ", 0, 5, 0, NULL, 0, 0);
  2041.       wmenuitem (6, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  2042.       wmenuitem (6, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  2043.       wmenuitem (6, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  2044.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  2045.  
  2046.       DisplayTextField (0, 22, Data->DialCmd, sizeof (Data->DialCmd), 36);
  2047.       DisplayTextField (1, 22, Data->InetAddress, sizeof (Data->InetAddress), 38);
  2048.       wprints (2, 22, WHITE|_BLUE, (Data->ImportPOP3Mail == TRUE) ? "Yes" : "No ");
  2049.       DisplayTextField (3, 22, Data->Pop3Pwd, sizeof (Data->Pop3Pwd), 36);
  2050.       wprints (4, 22, WHITE|_BLUE, (Data->UseInetAddress == TRUE) ? "Yes" : "No ");
  2051.  
  2052.       switch (menu_sel = wmenuget ()) {
  2053.          case 1:
  2054.             GetTextField (0, 22, Data->DialCmd, sizeof (Data->DialCmd), 36);
  2055.             break;
  2056.          case 2:
  2057.             GetTextField (1, 22, Data->InetAddress, sizeof (Data->InetAddress), 38);
  2058.             break;
  2059.          case 3:
  2060.             Data->ImportPOP3Mail = (Data->ImportPOP3Mail == TRUE) ? FALSE : TRUE;
  2061.             break;
  2062.          case 4:
  2063.             GetTextField (3, 22, Data->Pop3Pwd, sizeof (Data->Pop3Pwd), 36);
  2064.             break;
  2065.          case 5:
  2066.             Data->UseInetAddress = (Data->UseInetAddress == TRUE) ? FALSE : TRUE;
  2067.             break;
  2068.          case 996:
  2069.             RetVal = TRUE;
  2070.             break;
  2071.          case 997:
  2072.             RetVal = FALSE;
  2073.             break;
  2074.       }
  2075.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  2076.  
  2077.    wclose ();
  2078.  
  2079.    return (RetVal);
  2080. }
  2081.  
  2082. USHORT CNodeSecurityDlg (class TNodes *Data)
  2083. {
  2084.    int menu_sel = 996;
  2085.    USHORT RetVal = FALSE;
  2086.  
  2087.    wopen (8, 13, 17, 65, 1, WHITE|_LGREY, WHITE|_LGREY);
  2088.    wshadow (DGREY|_BLACK);
  2089.    wtitle (" Node Security ", TCENTER, WHITE|_LGREY);
  2090.  
  2091.    DisplayButton (6, 2, "   Ok   ");
  2092.    DisplayButton (6, 12, " Cancel ");
  2093.    DisplayButton (6, 22, "  Help  ");
  2094.  
  2095.    do {
  2096.       wmenubegc ();
  2097.       wmenuitem (0, 1, " Session Pwd.    ", 0, 1, 0, NULL, 0, 0);
  2098.       wmenuitem (1, 1, " In Packet Pwd.  ", 0, 2, 0, NULL, 0, 0);
  2099.       wmenuitem (2, 1, " Out Packet Pwd. ", 0, 3, 0, NULL, 0, 0);
  2100.       wmenuitem (3, 1, " AreaMgr Pwd.    ", 0, 4, 0, NULL, 0, 0);
  2101.       wmenuitem (4, 1, " TIC Pwd.        ", 0, 5, 0, NULL, 0, 0);
  2102.       wmenuitem (6, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  2103.       wmenuitem (6, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  2104.       wmenuitem (6, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  2105.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  2106.  
  2107.       DisplayTextField (0, 19, Data->SessionPwd, sizeof (Data->SessionPwd), 31);
  2108.       DisplayTextField (1, 19, Data->InPktPwd, sizeof (Data->InPktPwd), 8);
  2109.       DisplayTextField (2, 19, Data->OutPktPwd, sizeof (Data->OutPktPwd), 8);
  2110.       DisplayTextField (3, 19, Data->AreaMgrPwd, sizeof (Data->AreaMgrPwd), 31);
  2111.       DisplayTextField (4, 19, Data->TicPwd, sizeof (Data->TicPwd), 31);
  2112.  
  2113.       switch (menu_sel = wmenuget ()) {
  2114.          case 1:
  2115.             GetTextField (0, 19, Data->SessionPwd, sizeof (Data->SessionPwd), 31);
  2116.             break;
  2117.          case 2:
  2118.             GetTextField (1, 19, Data->InPktPwd, sizeof (Data->InPktPwd), 8);
  2119.             break;
  2120.          case 3:
  2121.             GetTextField (2, 19, Data->OutPktPwd, sizeof (Data->OutPktPwd), 8);
  2122.             break;
  2123.          case 4:
  2124.             GetTextField (3, 19, Data->AreaMgrPwd, sizeof (Data->AreaMgrPwd), 31);
  2125.             break;
  2126.          case 5:
  2127.             GetTextField (4, 19, Data->TicPwd, sizeof (Data->TicPwd), 31);
  2128.             break;
  2129.          case 996:
  2130.             RetVal = TRUE;
  2131.             break;
  2132.          case 997:
  2133.             RetVal = FALSE;
  2134.             break;
  2135.       }
  2136.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  2137.  
  2138.    wclose ();
  2139.  
  2140.    return (RetVal);
  2141. }
  2142.  
  2143. USHORT CNodesListDlg (PSZ address)
  2144. {
  2145.    short i, start = 0;
  2146.    CHAR Temp[128], *p, **Array;
  2147.    USHORT RetVal = FALSE;
  2148.    class TNodes *Data;
  2149.    class TCollection List;
  2150.  
  2151.    wopen (7, 2, 23, 77, 1, WHITE|_LGREY, WHITE|_LGREY);
  2152.    wshadow (DGREY|_BLACK);
  2153.    wtitle (" Nodes List ", TCENTER, WHITE|_LGREY);
  2154.  
  2155.    sprintf (Temp, " %-18.18s %-26.26s %-26.26s ", "Address", "System Name", "Sysop Name");
  2156.    wprints (0, 0, YELLOW|_LGREY, Temp);
  2157.  
  2158.    Data = new TNodes (Cfg->NodelistPath);
  2159.    if (Data->First () == TRUE) {
  2160.       i = 0;
  2161.       List.Clear ();
  2162.       do {
  2163.          sprintf (Temp, " %-18.18s %-26.26s %-26.26s ", Data->Address, Data->SystemName, Data->SysopName);
  2164.          List.Add (Temp);
  2165.          if (!strcmp (Data->Address, address))
  2166.             start = i;
  2167.          i++;
  2168.       } while (Data->Next () == TRUE);
  2169.  
  2170.       if (List.Elements > 0) {
  2171.          i = 0;
  2172.          Array = (CHAR **)malloc ((List.Elements + 1) * sizeof (CHAR *));
  2173.          if ((p = (CHAR *)List.First ()) != NULL)
  2174.             do {
  2175.                Array[i++] = p;
  2176.             } while ((p = (CHAR *)List.Next ()) != NULL);
  2177.          Array[i] = NULL;
  2178.          if ((i = wpickstr (9, 3, 22, 76, 5, WHITE|_LGREY, WHITE|_LGREY, WHITE|_BLUE, Array, start, NULL)) != -1) {
  2179.             p = Array[i] + 1;
  2180.             p[18] = '\0';
  2181.             strcpy (address, strtrim (p));
  2182.             RetVal = TRUE;
  2183.          }
  2184.          if (Array != NULL)
  2185.             free (Array);
  2186.       }
  2187.       else
  2188.          getxch ();
  2189.    }
  2190.    else
  2191.       getxch ();
  2192.  
  2193.    wclose ();
  2194.  
  2195.    if (Data != NULL)
  2196.       delete Data;
  2197.  
  2198.    return (RetVal);
  2199. }
  2200.  
  2201. USHORT CNodesDlg (VOID)
  2202. {
  2203.    int menu_sel = 1;
  2204.    USHORT RetVal = FALSE;
  2205.    class TNodes *Data;
  2206.  
  2207.    Data = new TNodes (Cfg->NodelistPath);
  2208.    if (Data->First () == FALSE)
  2209.       Data->New ();
  2210.  
  2211.    wopen (5, 5, 20, 74, 1, WHITE|_LGREY, WHITE|_LGREY);
  2212.    wshadow (DGREY|_BLACK);
  2213.    wtitle (" Nodes ", TCENTER, WHITE|_LGREY);
  2214.  
  2215.    DisplayButton (10, 32, "  Other ");
  2216.    DisplayButton (10, 47, "    Security     ");
  2217.  
  2218.    DisplayButton (12,  2, " Change ");
  2219.    DisplayButton (12, 12, "  Add   ");
  2220.    DisplayButton (12, 22, " Delete ");
  2221.    DisplayButton (12, 32, "  List  ");
  2222.    DisplayButton (12, 47, "  Prev. ");
  2223.    DisplayButton (12, 57, "  Next  ");
  2224.  
  2225.    do {
  2226.       wmenubegc ();
  2227.       wmenuitem (0, 1, " Address        ", 0, 1, 0, NULL, 0, 0);
  2228.       wmenuitem (1, 1, " System Name    ", 0, 2, 0, NULL, 0, 0);
  2229.       wmenuitem (2, 1, " Sysop Name     ", 0, 3, 0, NULL, 0, 0);
  2230.       wmenuitem (3, 1, " Location       ", 0, 4, 0, NULL, 0, 0);
  2231.       wmenuitem (4, 1, " Phone Number   ", 0, 5, 0, NULL, 0, 0);
  2232.       wmenuitem (5, 1, " Nodelist Flags ", 0, 6, 0, NULL, 0, 0);
  2233.       wmenuitem (6, 1, " New EchoMail   ", 0, 7, 0, NULL, 0, 0);
  2234.       wmenuitem (7, 1, " Areas Filter   ", 0, 8, 0, NULL, 0, 0);
  2235.       wmenuitem (8, 1, " Compressor     ", 0, 9, 0, NULL, 0, 0);
  2236.  
  2237.       wmenuitem (2, 50, " Remap Mail  ", 0, 10, 0, NULL, 0, 0);
  2238.  
  2239.       wmenuitem (10, 32, "  Other ", 'O', 122, 0, NULL, 0, 0);
  2240.       wmenuitem (10, 47, "    Security      ", 'S', 123, 0, NULL, 0, 0);
  2241.  
  2242.       wmenuitem (12,  2, " Change ", 'C', 996, 0, NULL, 0, 0);
  2243.       wmenuitem (12, 12, "  Add   ", 'A', 115, 0, NULL, 0, 0);
  2244.       wmenuitem (12, 22, " Delete ", 'D', 116, 0, NULL, 0, 0);
  2245.       wmenuitem (12, 32, "  List  ", 'L', 117, 0, NULL, 0, 0);
  2246.       wmenuitem (12, 47, "  Prev. ", 'P', 118, 0, NULL, 0, 0);
  2247.       wmenuitem (12, 57, "  Next  ", 'N', 119, 0, NULL, 0, 0);
  2248.  
  2249.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  2250.  
  2251.       DisplayTextField (0, 18, Data->Address, sizeof (Data->Address), 31);
  2252.       DisplayTextField (1, 18, Data->SystemName, sizeof (Data->SystemName), 49);
  2253.       DisplayTextField (2, 18, Data->SysopName, sizeof (Data->SysopName), 31);
  2254.       DisplayTextField (3, 18, Data->Location, sizeof (Data->Location), 31);
  2255.       DisplayTextField (4, 18, Data->Phone, sizeof (Data->Phone), 31);
  2256.       DisplayTextField (5, 18, Data->Flags, sizeof (Data->Flags), 49);
  2257.       wprints (6, 18, WHITE|_BLUE, (Data->CreateNewAreas == TRUE) ? "Yes" : "No ");
  2258.       DisplayTextField (7, 18, Data->NewAreasFilter, sizeof (Data->NewAreasFilter), 49);
  2259.       DisplayTextField (8, 18, Data->Packer, sizeof (Data->Packer), 31);
  2260.  
  2261.       wprints (2, 64, WHITE|_BLUE, (Data->RemapMail == TRUE) ? "Yes" : "No ");
  2262.  
  2263.       switch (menu_sel = wmenuget ()) {
  2264.          case 1:
  2265.             GetTextField (0, 18, Data->Address, sizeof (Data->Address), 31);
  2266.             break;
  2267.          case 2:
  2268.             GetTextField (1, 18, Data->SystemName, sizeof (Data->SystemName), 49);
  2269.             break;
  2270.          case 3:
  2271.             GetTextField (2, 18, Data->SysopName, sizeof (Data->SysopName), 31);
  2272.             break;
  2273.          case 4:
  2274.             GetTextField (3, 18, Data->Location, sizeof (Data->Location), 31);
  2275.             break;
  2276.          case 5:
  2277.             GetTextField (4, 18, Data->Phone, sizeof (Data->Phone), 31);
  2278.             break;
  2279.          case 6:
  2280.             GetTextField (5, 18, Data->Flags, sizeof (Data->Flags), 49);
  2281.             break;
  2282.          case 7:
  2283.             Data->CreateNewAreas = (Data->CreateNewAreas == TRUE) ? FALSE : TRUE;
  2284.             break;
  2285.          case 8:
  2286.             GetTextField (7, 18, Data->NewAreasFilter, sizeof (Data->NewAreasFilter), 49);
  2287.             break;
  2288.          case 9:
  2289.             GetTextField (8, 18, Data->Packer, sizeof (Data->Packer), 31);
  2290.             break;
  2291.          case 10:
  2292.             Data->RemapMail = (Data->RemapMail == TRUE) ? FALSE : TRUE;
  2293.             break;
  2294.          case 115: {
  2295.             CHAR Address[32], System[50], Sysop[32];
  2296.  
  2297.             Address[0] = System[0] = Sysop[0] = '\0';
  2298.             if (CAddNodeDlg (Address, System, Sysop) == TRUE) {
  2299.                Data->New ();
  2300.                strcpy (Data->Address, Address);
  2301.                strcpy (Data->SystemName, System);
  2302.                strcpy (Data->SysopName, Sysop);
  2303.                Data->Add ();
  2304.             }
  2305.             break;
  2306.          }
  2307.          case 116:
  2308.             if (MessageBox ("Delete Node", "Are you really sure ?") == TRUE)
  2309.                Data->Delete ();
  2310.             break;
  2311.          case 117: {
  2312.             CHAR Address[32];
  2313.  
  2314.             strcpy (Address, Data->Address);
  2315.             if (CNodesListDlg (Address) == TRUE)
  2316.                Data->Read (Address);
  2317.             break;
  2318.          }
  2319.          case 118:
  2320.             Data->Previous ();
  2321.             break;
  2322.          case 119:
  2323.             Data->Next ();
  2324.             break;
  2325.          case 122:
  2326.             COtherNodeDlg (Data);
  2327.             break;
  2328.          case 123:
  2329.             CNodeSecurityDlg (Data);
  2330.             break;
  2331.          case 996:
  2332.             Data->Update ();
  2333.             break;
  2334.       }
  2335.    } while (menu_sel != -1);
  2336.  
  2337.    wclose ();
  2338.  
  2339.    if (Data != NULL)
  2340.       delete Data;
  2341.  
  2342.    return (RetVal);
  2343. }
  2344.  
  2345. // ----------------------------------------------------------------------
  2346.  
  2347. USHORT CSiteInfoDlg (VOID)
  2348. {
  2349.    int menu_sel = 996;
  2350.    USHORT RetVal = FALSE;
  2351.  
  2352.    wopen (9, 5, 18, 73, 1, WHITE|_LGREY, WHITE|_LGREY);
  2353.    wshadow (DGREY|_BLACK);
  2354.    wtitle (" Site Informations ", TCENTER, WHITE|_LGREY);
  2355.  
  2356.    DisplayButton (6, 2, "   Ok   ");
  2357.    DisplayButton (6, 12, " Cancel ");
  2358.    DisplayButton (6, 22, "  Help  ");
  2359.  
  2360.    do {
  2361.       wmenubegc ();
  2362.       wmenuitem (0, 1, " System Name  ", 0, 1, 0, NULL, 0, 0);
  2363.       wmenuitem (1, 1, " Sysop        ", 0, 2, 0, NULL, 0, 0);
  2364.       wmenuitem (2, 1, " Location     ", 0, 3, 0, NULL, 0, 0);
  2365.       wmenuitem (3, 1, " Phone Number ", 0, 4, 0, NULL, 0, 0);
  2366.       wmenuitem (4, 1, " Flags        ", 0, 5, 0, NULL, 0, 0);
  2367.       wmenuitem (6, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  2368.       wmenuitem (6, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  2369.       wmenuitem (6, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  2370.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  2371.  
  2372.       DisplayTextField (0, 16, Cfg->SystemName, sizeof (Cfg->SystemName), 50);
  2373.       DisplayTextField (1, 16, Cfg->SysopName, sizeof (Cfg->SysopName), 50);
  2374.       DisplayTextField (2, 16, Cfg->Location, sizeof (Cfg->Location), 50);
  2375.       DisplayTextField (3, 16, Cfg->Phone, sizeof (Cfg->Phone), 40);
  2376.       DisplayTextField (4, 16, Cfg->NodelistFlags, sizeof (Cfg->NodelistFlags), 50);
  2377.  
  2378.       switch (menu_sel = wmenuget ()) {
  2379.          case 1:
  2380.             GetTextField (0, 16, Cfg->SystemName, sizeof (Cfg->SystemName), 50);
  2381.             break;
  2382.          case 2:
  2383.             GetTextField (1, 16, Cfg->SysopName, sizeof (Cfg->SysopName), 50);
  2384.             break;
  2385.          case 3:
  2386.             GetTextField (2, 16, Cfg->Location, sizeof (Cfg->Location), 50);
  2387.             break;
  2388.          case 4:
  2389.             GetTextField (3, 16, Cfg->Phone, sizeof (Cfg->Phone), 40);
  2390.             break;
  2391.          case 5:
  2392.             GetTextField (4, 16, Cfg->NodelistFlags, sizeof (Cfg->NodelistFlags), 50);
  2393.             break;
  2394.          case 996:
  2395.             RetVal = TRUE;
  2396.             break;
  2397.          case 997:
  2398.             RetVal = FALSE;
  2399.             break;
  2400.       }
  2401.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  2402.  
  2403.    wclose ();
  2404.  
  2405.    return (RetVal);
  2406. }
  2407.  
  2408. // ----------------------------------------------------------------------
  2409.  
  2410. USHORT CCompressorListDlg (PSZ Key)
  2411. {
  2412.    short i, start = 0;
  2413.    CHAR Temp[128], *p, **Array;
  2414.    USHORT RetVal = FALSE;
  2415.    class TPacker *Data;
  2416.    class TCollection List;
  2417.  
  2418.    wopen (10, 4, 23, 75, 1, WHITE|_LGREY, WHITE|_LGREY);
  2419.    wshadow (DGREY|_BLACK);
  2420.    wtitle (" Compressors List ", TCENTER, WHITE|_LGREY);
  2421.  
  2422.    sprintf (Temp, " %-12.12s %-31.31s %s  %s %s %s  ", "Key", "Display", "DOS", "OS/2", "Windows", "Linux");
  2423.    wprints (0, 0, YELLOW|_LGREY, Temp);
  2424.  
  2425.    Data = new TPacker (Cfg->SystemPath);
  2426.    if (Data->First () == TRUE) {
  2427.       i = 0;
  2428.       List.Clear ();
  2429.       do {
  2430.          sprintf (Temp, " %-12.12s %-31.31s %s  %s    %s    %s  ", Data->Key, Data->Display, (Data->Dos == TRUE) ? "Yes" : "No ", (Data->OS2 == TRUE) ? "Yes" : "No ", (Data->Windows == TRUE) ? "Yes" : "No ", (Data->Linux == TRUE) ? "Yes" : "No ");
  2431.          List.Add (Temp);
  2432.          if (!strcmp (Data->Key, Key))
  2433.             start = i;
  2434.          i++;
  2435.       } while (Data->Next () == TRUE);
  2436.  
  2437.       if (List.Elements > 0) {
  2438.          i = 0;
  2439.          Array = (CHAR **)malloc ((List.Elements + 1) * sizeof (CHAR *));
  2440.          if ((p = (CHAR *)List.First ()) != NULL)
  2441.             do {
  2442.                Array[i++] = p;
  2443.             } while ((p = (CHAR *)List.Next ()) != NULL);
  2444.          Array[i] = NULL;
  2445.          if ((i = wpickstr (12, 5, 22, 74, 5, WHITE|_LGREY, WHITE|_LGREY, WHITE|_BLUE, Array, start, NULL)) != -1) {
  2446.             p = Array[i] + 1;
  2447.             p[27] = '\0';
  2448.             strcpy (Key, strtrim (p));
  2449.             RetVal = TRUE;
  2450.          }
  2451.          if (Array != NULL)
  2452.             free (Array);
  2453.       }
  2454.       else
  2455.          getxch ();
  2456.    }
  2457.    else
  2458.       getxch ();
  2459.  
  2460.    wclose ();
  2461.  
  2462.    if (Data != NULL)
  2463.       delete Data;
  2464.  
  2465.    return (RetVal);
  2466. }
  2467.  
  2468. USHORT CAddCompressorDlg (PSZ Key, PSZ Display)
  2469. {
  2470.    int menu_sel = 996;
  2471.    USHORT RetVal = FALSE;
  2472.  
  2473.    wopen (9, 17, 15, 62, 1, WHITE|_LGREY, WHITE|_LGREY);
  2474.    wshadow (DGREY|_BLACK);
  2475.    wtitle (" Add Compressor ", TCENTER, WHITE|_LGREY);
  2476.  
  2477.    DisplayButton (3, 2, "   Ok   ");
  2478.    DisplayButton (3, 12, " Cancel ");
  2479.    DisplayButton (3, 22, "  Help  ");
  2480.  
  2481.    do {
  2482.       wmenubegc ();
  2483.       wmenuitem (0, 1, " Key     ", 0, 1, 0, NULL, 0, 0);
  2484.       wmenuitem (1, 1, " Display ", 0, 2, 0, NULL, 0, 0);
  2485.       wmenuitem (3, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  2486.       wmenuitem (3, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  2487.       wmenuitem (3, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  2488.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  2489.  
  2490.       DisplayTextField (0, 11, Key, 15, 15);
  2491.       DisplayTextField (1, 11, Display, 31, 31);
  2492.  
  2493.       switch (menu_sel = wmenuget ()) {
  2494.          case 1:
  2495.             GetTextField (0, 11, Key, 15, 15);
  2496.             break;
  2497.          case 2:
  2498.             GetTextField (1, 11, Display, 31, 31);
  2499.             break;
  2500.          case 996:
  2501.             RetVal = TRUE;
  2502.             break;
  2503.          case 997:
  2504.             RetVal = FALSE;
  2505.             break;
  2506.       }
  2507.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  2508.  
  2509.    wclose ();
  2510.  
  2511.    return (RetVal);
  2512. }
  2513.  
  2514. USHORT CCompressorDlg (VOID)
  2515. {
  2516.    int menu_sel = 1;
  2517.    USHORT RetVal = FALSE;
  2518.    CHAR Temp[32];
  2519.    class TPacker *Data;
  2520.  
  2521.    Data = new TPacker (Cfg->SystemPath);
  2522.    if (Data->First (FALSE) == FALSE)
  2523.       Data->New ();
  2524.  
  2525.    wopen (7, 5, 18, 74, 1, WHITE|_LGREY, WHITE|_LGREY);
  2526.    wshadow (DGREY|_BLACK);
  2527.    wtitle (" Compressors ", TCENTER, WHITE|_LGREY);
  2528.  
  2529.    DisplayButton (8,  2, " Change ");
  2530.    DisplayButton (8, 12, "  Add   ");
  2531.    DisplayButton (8, 22, " Delete ");
  2532.    DisplayButton (8, 32, "  List  ");
  2533.    DisplayButton (8, 47, "  Prev. ");
  2534.    DisplayButton (8, 57, "  Next  ");
  2535.  
  2536.    do {
  2537.       wmenubegc ();
  2538.       wmenuitem (0, 1, " Key         ", 0, 1, 0, NULL, 0, 0);
  2539.       wmenuitem (1, 1, " Display     ", 0, 2, 0, NULL, 0, 0);
  2540.       wmenuitem (2, 1, " Position    ", 0, 3, 0, NULL, 0, 0);
  2541.       wmenuitem (3, 1, " Id          ", 0, 4, 0, NULL, 0, 0);
  2542.       wmenuitem (4, 1, " Pack Cmd.   ", 0, 5, 0, NULL, 0, 0);
  2543.       wmenuitem (5, 1, " Unpack Cmd. ", 0, 6, 0, NULL, 0, 0);
  2544.       wmenuitem (6, 1, " DOS         ", 0, 7, 0, NULL, 0, 0);
  2545.       wmenuitem (6, 19, " OS/2    ", 0, 8, 0, NULL, 0, 0);
  2546.       wmenuitem (6, 33, " Windows ", 0, 9, 0, NULL, 0, 0);
  2547.       wmenuitem (6, 47, " Linux   ", 0, 10, 0, NULL, 0, 0);
  2548.  
  2549.       wmenuitem (8,  2, " Change ", 'C', 996, 0, NULL, 0, 0);
  2550.       wmenuitem (8, 12, "  Add   ", 'A', 115, 0, NULL, 0, 0);
  2551.       wmenuitem (8, 22, " Delete ", 'D', 116, 0, NULL, 0, 0);
  2552.       wmenuitem (8, 32, "  List  ", 'L', 117, 0, NULL, 0, 0);
  2553.       wmenuitem (8, 47, "  Prev. ", 'P', 118, 0, NULL, 0, 0);
  2554.       wmenuitem (8, 57, "  Next  ", 'N', 119, 0, NULL, 0, 0);
  2555.  
  2556.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  2557.  
  2558.       DisplayTextField (0, 15, Data->Key, sizeof (Data->Key), 31);
  2559.       DisplayTextField (1, 15, Data->Display, sizeof (Data->Display), 52);
  2560.       sprintf (Temp, "%ld", Data->Position);
  2561.       DisplayTextField (2, 15, Temp, 5, 5);
  2562.       DisplayTextField (3, 15, Data->Id, sizeof (Data->Id), 52);
  2563.       DisplayTextField (4, 15, Data->PackCmd, sizeof (Data->PackCmd), 52);
  2564.       DisplayTextField (5, 15, Data->UnpackCmd, sizeof (Data->UnpackCmd), 52);
  2565.       wprints (6, 15, WHITE|_BLUE, (Data->Dos == TRUE) ? "Yes" : "No ");
  2566.       wprints (6, 29, WHITE|_BLUE, (Data->OS2 == TRUE) ? "Yes" : "No ");
  2567.       wprints (6, 43, WHITE|_BLUE, (Data->Windows == TRUE) ? "Yes" : "No ");
  2568.       wprints (6, 57, WHITE|_BLUE, (Data->Linux == TRUE) ? "Yes" : "No ");
  2569.  
  2570.       switch (menu_sel = wmenuget ()) {
  2571.          case 1:
  2572.             GetTextField (0, 15, Data->Key, sizeof (Data->Key), 31);
  2573.             break;
  2574.          case 2:
  2575.             GetTextField (1, 15, Data->Display, sizeof (Data->Display), 52);
  2576.             break;
  2577.          case 3:
  2578.             sprintf (Temp, "%ld", Data->Position);
  2579.             GetTextField (2, 15, Temp, 5, 5);
  2580.             Data->Position = atol (Temp);
  2581.             break;
  2582.          case 4:
  2583.             GetTextField (3, 15, Data->Id, sizeof (Data->Id), 52);
  2584.             break;
  2585.          case 5:
  2586.             GetTextField (4, 15, Data->PackCmd, sizeof (Data->PackCmd), 52);
  2587.             break;
  2588.          case 6:
  2589.             GetTextField (5, 15, Data->UnpackCmd, sizeof (Data->UnpackCmd), 52);
  2590.             break;
  2591.          case 7:
  2592.             Data->Dos = (Data->Dos == TRUE) ? FALSE : TRUE;
  2593.             break;
  2594.          case 8:
  2595.             Data->OS2 = (Data->OS2 == TRUE) ? FALSE : TRUE;
  2596.             break;
  2597.          case 9:
  2598.             Data->Windows = (Data->Windows == TRUE) ? FALSE : TRUE;
  2599.             break;
  2600.          case 10:
  2601.             Data->Linux = (Data->Linux == TRUE) ? FALSE : TRUE;
  2602.             break;
  2603.          case 115: {
  2604.             CHAR Key[16], Display[32];
  2605.  
  2606.             Key[0] = Display[0] = '\0';
  2607.             if (CAddCompressorDlg (Key, Display) == TRUE) {
  2608.                Data->New ();
  2609.                strcpy (Data->Key, Key);
  2610.                strcpy (Data->Display, Display);
  2611.                Data->Add ();
  2612.             }
  2613.             break;
  2614.          }
  2615.          case 116:
  2616.             if (MessageBox ("Delete Record", "Are you really sure ?") == TRUE)
  2617.                Data->Delete ();
  2618.             break;
  2619.          case 117:
  2620.             CCompressorListDlg ("");
  2621.             break;
  2622.          case 118:
  2623.             Data->Previous (FALSE);
  2624.             break;
  2625.          case 119:
  2626.             Data->Next (FALSE);
  2627.             break;
  2628.          case 996:
  2629.             Data->Update ();
  2630.             break;
  2631.       }
  2632.    } while (menu_sel != -1);
  2633.  
  2634.    wclose ();
  2635.  
  2636.    if (Data != NULL)
  2637.       delete Data;
  2638.  
  2639.    return (RetVal);
  2640. }
  2641.  
  2642. // ----------------------------------------------------------------------
  2643.  
  2644. USHORT CSelectNodelistDlg (class TNodes *Data)
  2645. {
  2646.    short i, a, start = 0;
  2647.    CHAR Temp[128], *p, **Array;
  2648.    USHORT RetVal = FALSE;
  2649.    class TCollection List;
  2650.  
  2651.    if (Data->FirstNodelist () == TRUE) {
  2652.       i = 1;
  2653.       List.Clear ();
  2654.       do {
  2655.          sprintf (Temp, " %5d │ %-12.12s │ %-12.12s ", Data->DefaultZone, Data->Nodelist, Data->Nodediff);
  2656.          List.Add (Temp);
  2657.          i++;
  2658.       } while (Data->NextNodelist () == TRUE);
  2659.  
  2660.       if (List.Elements > 0) {
  2661.          i = 0;
  2662.          Array = (CHAR **)malloc ((List.Elements + 1) * sizeof (CHAR *));
  2663.          if ((p = (CHAR *)List.First ()) != NULL)
  2664.             do {
  2665.                Array[i++] = p;
  2666.             } while ((p = (CHAR *)List.Next ()) != NULL);
  2667.          Array[i] = NULL;
  2668.          if ((i += 5) > 15)
  2669.             i = 15;
  2670.          if ((i = wpickstr (6, 15, i, 51, 5, BLACK|_CYAN, BLACK|_CYAN, YELLOW|_CYAN, Array, start, NULL)) != -1) {
  2671.             a = 0;
  2672.             if (Data->FirstNodelist () == TRUE)
  2673.                do {
  2674.                   if (a++ == i)
  2675.                      break;
  2676.                } while (Data->NextNodelist () == TRUE);
  2677.             RetVal = TRUE;
  2678.          }
  2679.          if (Array != NULL)
  2680.             free (Array);
  2681.       }
  2682.       else
  2683.          getxch ();
  2684.    }
  2685.    else
  2686.       getxch ();
  2687.  
  2688.    return (RetVal);
  2689. }
  2690.  
  2691. USHORT CNodelistDlg (VOID)
  2692. {
  2693.    short i, menu_sel = 996, sub_menu_sel = 996;
  2694.    CHAR Temp[64], Zone[16], Nodelist[32], Nodediff[32];
  2695.    USHORT RetVal = FALSE;
  2696.    class TNodes *Data;
  2697.  
  2698.    if ((Data = new TNodes (Cfg->NodelistPath)) != NULL)
  2699.       Data->LoadNodelist ();
  2700.    if (Cfg->MailAddress.First () == TRUE)
  2701.       Data->DefaultZone = Cfg->MailAddress.Zone;
  2702.  
  2703.    wopen (4, 13, 19, 65, 1, WHITE|_LGREY, WHITE|_LGREY);
  2704.    wshadow (DGREY|_BLACK);
  2705.    wtitle (" Nodelist ", TCENTER, WHITE|_LGREY);
  2706.  
  2707.    DisplayButton (1, 40, "  Add   ");
  2708.    DisplayButton (3, 40, "  Edit  ");
  2709.    DisplayButton (5, 40, " Remove ");
  2710.  
  2711.    DisplayButton (12, 2, "   Ok   ");
  2712.    DisplayButton (12, 12, " Cancel ");
  2713.    DisplayButton (12, 22, "  Help  ");
  2714.  
  2715.    do {
  2716.       wmenubegc ();
  2717.       wmenuitem (1, 40, "  Add   ", 'A', 102, 0, NULL, 0, 0);
  2718.       wmenuitem (3, 40, "  Edit  ", 'E', 103, 0, NULL, 0, 0);
  2719.       wmenuitem (5, 40, " Remove ", 'R', 104, 0, NULL, 0, 0);
  2720.  
  2721.       wmenuitem (12, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  2722.       wmenuitem (12, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  2723.       wmenuitem (12, 22, "  Help  ", 'H', 998, 0, NULL, 0, 0);
  2724.       wmenuend ((short)menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  2725.  
  2726.       sprintf (Temp, "%5s   %-12.12s   %-12.12s", "Zone", "Nodelist", "Nodediff");
  2727.       wprints (0, 2, WHITE|_LGREY, Temp);
  2728.       for (i = 1; i <= 10; i++) {
  2729.          sprintf (Temp, " %5s │ %-12.12s │ %-12.12s ", "", "", "");
  2730.          wprints (i, 1, BLACK|_CYAN, Temp);
  2731.       }
  2732.  
  2733.       i = 1;
  2734.       if (Data->FirstNodelist () == TRUE)
  2735.          do {
  2736.             if (i <= 10) {
  2737.                sprintf (Temp, "%5d │ %-12.12s │ %-12.12s", Data->DefaultZone, Data->Nodelist, Data->Nodediff);
  2738.                wprints (i, 2, BLACK|_CYAN, Temp);
  2739.                i++;
  2740.             }
  2741.          } while (Data->NextNodelist () == TRUE);
  2742.  
  2743.       switch (menu_sel = wmenuget ()) {
  2744.          case 102:
  2745.             if (wopen (8, 20, 15, 59, 1, WHITE|_LGREY, WHITE|_LGREY) > 0) {
  2746.                wshadow (DGREY|_BLACK);
  2747.                wtitle (" Add Entry ", TCENTER, WHITE|_LGREY);
  2748.  
  2749.                DisplayButton (4, 2, "   Ok   ");
  2750.                DisplayButton (4, 12, " Cancel ");
  2751.  
  2752.                Zone[0] = '\0';
  2753.                Nodelist[0] = '\0';
  2754.                Nodediff[0] = '\0';
  2755.                sub_menu_sel = 996;
  2756.  
  2757.                do {
  2758.                   wmenubegc ();
  2759.                   wmenuitem (0, 1, " Zone     ", 0, 1, 0, NULL, 0, 0);
  2760.                   wmenuitem (1, 1, " Nodelist ", 0, 2, 0, NULL, 0, 0);
  2761.                   wmenuitem (2, 1, " Nodediff ", 0, 3, 0, NULL, 0, 0);
  2762.  
  2763.                   wmenuitem (4, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  2764.                   wmenuitem (4, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  2765.                   wmenuend ((short)sub_menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  2766.  
  2767.                   DisplayTextField (0, 12, Zone, sizeof (Zone), 5);
  2768.                   DisplayTextField (1, 12, Nodelist, sizeof (Nodelist), 25);
  2769.                   DisplayTextField (2, 12, Nodediff, sizeof (Nodediff), 25);
  2770.  
  2771.                   switch (sub_menu_sel = wmenuget ()) {
  2772.                      case 1:
  2773.                         GetTextField (0, 12, Zone, sizeof (Zone), 5);
  2774.                         break;
  2775.                      case 2:
  2776.                         GetTextField (1, 12, Nodelist, sizeof (Nodelist), 25);
  2777.                         break;
  2778.                      case 3:
  2779.                         GetTextField (2, 12, Nodediff, sizeof (Nodediff), 25);
  2780.                         break;
  2781.                   }
  2782.                } while (sub_menu_sel != -1 && sub_menu_sel != 996 && sub_menu_sel != 997);
  2783.  
  2784.                if (sub_menu_sel == 996)
  2785.                   Data->AddNodelist (Nodelist, Nodediff, (USHORT)atoi (Zone));
  2786.  
  2787.                wclose ();
  2788.             }
  2789.             break;
  2790.          case 103:
  2791.             if (CSelectNodelistDlg (Data) == TRUE) {
  2792.                if (wopen (8, 20, 15, 59, 1, WHITE|_LGREY, WHITE|_LGREY) > 0) {
  2793.                   wshadow (DGREY|_BLACK);
  2794.                   wtitle (" Edit Entry ", TCENTER, WHITE|_LGREY);
  2795.  
  2796.                   DisplayButton (4, 2, "   Ok   ");
  2797.                   DisplayButton (4, 12, " Cancel ");
  2798.  
  2799.                   sprintf (Zone, "%d", Data->DefaultZone);
  2800.                   strcpy (Nodelist, Data->Nodelist);
  2801.                   strcpy (Nodediff, Data->Nodediff);
  2802.                   sub_menu_sel = 996;
  2803.  
  2804.                   do {
  2805.                      wmenubegc ();
  2806.                      wmenuitem (0, 1, " Zone     ", 0, 1, 0, NULL, 0, 0);
  2807.                      wmenuitem (1, 1, " Nodelist ", 0, 2, 0, NULL, 0, 0);
  2808.                      wmenuitem (2, 1, " Nodediff ", 0, 3, 0, NULL, 0, 0);
  2809.  
  2810.                      wmenuitem (4, 2, "   Ok   ", 'O', 996, 0, NULL, 0, 0);
  2811.                      wmenuitem (4, 12, " Cancel ", 'C', 997, 0, NULL, 0, 0);
  2812.                      wmenuend ((short)sub_menu_sel, M_OMNI|M_SAVE, 0, 0, BLACK|_GREEN, YELLOW|_GREEN, DGREY|_GREEN, WHITE|_GREEN);
  2813.  
  2814.                      DisplayTextField (0, 12, Zone, sizeof (Zone), 5);
  2815.                      DisplayTextField (1, 12, Nodelist, sizeof (Nodelist), 25);
  2816.                      DisplayTextField (2, 12, Nodediff, sizeof (Nodediff), 25);
  2817.  
  2818.                      switch (sub_menu_sel = wmenuget ()) {
  2819.                         case 1:
  2820.                            GetTextField (0, 12, Zone, sizeof (Zone), 5);
  2821.                            break;
  2822.                         case 2:
  2823.                            GetTextField (1, 12, Nodelist, sizeof (Nodelist), 25);
  2824.                            break;
  2825.                         case 3:
  2826.                            GetTextField (2, 12, Nodediff, sizeof (Nodediff), 25);
  2827.                            break;
  2828.                      }
  2829.                   } while (sub_menu_sel != -1 && sub_menu_sel != 996 && sub_menu_sel != 997);
  2830.  
  2831.                   if (sub_menu_sel == 996)
  2832.                      ;
  2833.  
  2834.                   wclose ();
  2835.                }
  2836.             }
  2837.             break;
  2838.          case 104:
  2839.             if (CSelectNodelistDlg (Data) == TRUE)
  2840.                Data->DeleteNodelist ();
  2841.             break;
  2842.          case 996:
  2843.             RetVal = TRUE;
  2844.             Data->SaveNodelist ();
  2845.             break;
  2846.          case 997:
  2847.             RetVal = FALSE;
  2848.             break;
  2849.       }
  2850.    } while (menu_sel != -1 && menu_sel != 996 && menu_sel != 997);
  2851.  
  2852.    wclose ();
  2853.  
  2854.    if (Data != NULL)
  2855.       delete Data;
  2856.  
  2857.    return (RetVal);
  2858. }
  2859.  
  2860.