home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / lora299s.zip / BBSCFG.CPP < prev    next >
C/C++ Source or Header  |  1998-05-12  |  96KB  |  3,805 lines

  1.  
  2. // LoraBBS Version 2.99 Free Edition
  3. // Copyright (C) 1987-98 Marco Maccaferri
  4. //
  5. // This program is free software; you can redistribute it and/or modify
  6. // it under the terms of the GNU General Public License as published by
  7. // the Free Software Foundation; either version 2 of the License, or
  8. // (at your option) any later version.
  9. //
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. // GNU General Public License for more details.
  14. //
  15. // You should have received a copy of the GNU General Public License
  16. // along with this program; if not, write to the Free Software
  17. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  
  19. #include "_ldefs.h"
  20. #include "lorawin.h"
  21.  
  22. #if !defined(__POINT__)
  23. class CColorDlg : public CDialog
  24. {
  25. public:
  26.    CColorDlg (HWND p_hWnd);
  27.  
  28.    UCHAR  color;
  29.    UCHAR  foreground;
  30.    UCHAR  background;
  31.  
  32.    USHORT OnInitDialog (VOID);
  33.    VOID   OnOK (VOID);
  34. };
  35.  
  36. CColorDlg::CColorDlg (HWND p_hWnd) : CDialog ("29", p_hWnd)
  37. {
  38.    color = 0;
  39.    foreground = background = 0;
  40. }
  41.  
  42. USHORT CColorDlg::OnInitDialog (VOID)
  43. {
  44.    Center ();
  45.  
  46.    LM_AddString (103, "Black");
  47.    LM_AddString (103, "Blue");
  48.    LM_AddString (103, "Green");
  49.    LM_AddString (103, "Cyan");
  50.    LM_AddString (103, "Red");
  51.    LM_AddString (103, "Purple");
  52.    LM_AddString (103, "Brown");
  53.    LM_AddString (103, "White");
  54.    LM_AddString (103, "Grey");
  55.    LM_AddString (103, "Bright Blue");
  56.    LM_AddString (103, "Bright Green");
  57.    LM_AddString (103, "Bright Cyan");
  58.    LM_AddString (103, "Bright Red");
  59.    LM_AddString (103, "Bright Purple");
  60.    LM_AddString (103, "Bright Yellow");
  61.    LM_AddString (103, "Bright White");
  62.  
  63.    LM_AddString (104, "Black");
  64.    LM_AddString (104, "Blue");
  65.    LM_AddString (104, "Green");
  66.    LM_AddString (104, "Cyan");
  67.    LM_AddString (104, "Red");
  68.    LM_AddString (104, "Purple");
  69.    LM_AddString (104, "Brown");
  70.    LM_AddString (104, "White");
  71.  
  72.    LM_SelectItem (103, (USHORT)(color & 0x0F));
  73.    LM_SelectItem (104, (USHORT)((color & 0x70) >> 4));
  74.    if (color & 0x80)
  75.       BM_SetCheck (105, TRUE);
  76.  
  77.    return (TRUE);
  78. }
  79.  
  80. VOID CColorDlg::OnOK (VOID)
  81. {
  82.    foreground = (UCHAR)LM_QuerySelection (103);
  83.    background = (UCHAR)LM_QuerySelection (104);
  84.    if (BM_QueryCheck (105) == TRUE)
  85.       background |= 0x08;
  86.  
  87.    color = (UCHAR)((background << 4) | foreground);
  88.  
  89.    EndDialog (TRUE);
  90. }
  91.  
  92. // ----------------------------------------------------------------------
  93. // New user options
  94. // ----------------------------------------------------------------------
  95.  
  96. class CNewUserSecurityDlg : public CDialog
  97. {
  98. public:
  99.    CNewUserSecurityDlg (HWND p_hWnd);
  100.  
  101.    USHORT OnInitDialog (VOID);
  102.    VOID   OnOK (VOID);
  103. };
  104.  
  105. BEGIN_MESSAGE_MAP (CNewUserDlg, CDialog)
  106.    ON_COMMAND (201, NewUserSecurity)
  107. END_MESSAGE_MAP ()
  108.  
  109. CNewUserDlg::CNewUserDlg (HWND p_hWnd) : CDialog ("21", p_hWnd)
  110. {
  111. }
  112.  
  113. VOID CNewUserDlg::OnHelp (VOID)
  114. {
  115.    WinHelp ("lora.hlp>h_ref", 21);
  116. }
  117.  
  118. USHORT CNewUserDlg::OnInitDialog (VOID)
  119. {
  120.    class TLimits *Limits;
  121.  
  122.    Center ();
  123.    SetFocus (101);
  124.  
  125.    BM_SetCheck (102 + Cfg->UseAnsi, TRUE);
  126.    BM_SetCheck (107 + Cfg->UseAvatar, TRUE);
  127.    BM_SetCheck (112 + Cfg->UseColor, TRUE);
  128.    BM_SetCheck (116 + Cfg->UseFullScreenEditor, TRUE);
  129.    BM_SetCheck (120 + Cfg->UseFullScreenReader, TRUE);
  130.    BM_SetCheck (124 + Cfg->UseFullScreenLists, TRUE);
  131.    BM_SetCheck (128 + Cfg->UseHotKey, TRUE);
  132.    BM_SetCheck (132 + Cfg->UseIBMChars, TRUE);
  133.    BM_SetCheck (136 + Cfg->AskLines, TRUE);
  134.    BM_SetCheck (139 + Cfg->UsePause, TRUE);
  135.    BM_SetCheck (143 + Cfg->UseScreenClear, TRUE);
  136.    BM_SetCheck (147 + Cfg->AskBirthDate, TRUE);
  137.    BM_SetCheck (150 + Cfg->AskMailCheck, TRUE);
  138.    BM_SetCheck (154 + Cfg->AskFileCheck, TRUE);
  139.    BM_SetCheck (158 + Cfg->AskAlias, TRUE);
  140.    BM_SetCheck (162 + Cfg->AskCompanyName, TRUE);
  141.    BM_SetCheck (166 + Cfg->AskAddress, TRUE);
  142.    BM_SetCheck (170 + Cfg->AskCity, TRUE);
  143.    BM_SetCheck (174 + Cfg->AskPhoneNumber, TRUE);
  144.    BM_SetCheck (178 + Cfg->AskGender, TRUE);
  145.  
  146.    if ((Limits = new TLimits (Cfg->SystemPath)) != NULL) {
  147.       if (Limits->First () == TRUE)
  148.          do {
  149.             LM_AddString (182, Limits->Key);
  150.          } while (Limits->Next () == TRUE);
  151.          delete Limits;
  152.    }
  153.    SetDlgItemText (182, Cfg->NewUserLimits);
  154.  
  155.    return (TRUE);
  156. }
  157.  
  158. UCHAR CNewUserDlg::GetSelection (USHORT id, USHORT num)
  159. {
  160.    UCHAR i;
  161.  
  162.    for (i = 0; i < num; i++) {
  163.       if (BM_QueryCheck (id + i) == TRUE)
  164.          return (i);
  165.    }
  166.  
  167.    return (0);
  168. }
  169.  
  170. VOID CNewUserDlg::OnOK (VOID)
  171. {
  172.    Cfg->UseAnsi = GetSelection (102, 4);
  173.    Cfg->UseAvatar = GetSelection (107, 4);
  174.    Cfg->UseColor = GetSelection (112, 3);
  175.    Cfg->UseFullScreenEditor = GetSelection (116, 3);
  176.    Cfg->UseFullScreenReader = GetSelection (120, 3);
  177.    Cfg->UseFullScreenLists = GetSelection (124, 3);
  178.    Cfg->UseHotKey = GetSelection (128, 3);
  179.    Cfg->UseIBMChars = GetSelection (132, 3);
  180.    Cfg->AskLines = GetSelection (136, 2);
  181.    Cfg->UsePause = GetSelection (139, 3);
  182.    Cfg->UseScreenClear = GetSelection (143, 3);
  183.    Cfg->AskBirthDate = GetSelection (147, 2);
  184.    Cfg->AskMailCheck = GetSelection (150, 3);
  185.    Cfg->AskFileCheck = GetSelection (154, 3);
  186.    Cfg->AskAlias = GetSelection (158, 3);
  187.    Cfg->AskCompanyName = GetSelection (162, 3);
  188.    Cfg->AskAddress = GetSelection (166, 3);
  189.    Cfg->AskCity = GetSelection (170, 3);
  190.    Cfg->AskPhoneNumber = GetSelection (174, 3);
  191.    Cfg->AskGender = GetSelection (178, 3);
  192.  
  193.    GetDlgItemText (182, Cfg->NewUserLimits, GetDlgItemTextLength (182));
  194.  
  195.    EndDialog (TRUE);
  196. }
  197.  
  198. VOID CNewUserDlg::NewUserSecurity (VOID)
  199. {
  200.    class CNewUserSecurityDlg *Dlg;
  201.  
  202.    if ((Dlg = new CNewUserSecurityDlg (m_hWnd)) != NULL) {
  203.       Dlg->DoModal ();
  204.       delete Dlg;
  205.    }
  206. }
  207.  
  208. // ----------------------------------------------------------------------
  209.  
  210. CNewUserSecurityDlg::CNewUserSecurityDlg (HWND p_hWnd) : CDialog ("18", p_hWnd)
  211. {
  212. }
  213.  
  214. USHORT CNewUserSecurityDlg::OnInitDialog (VOID)
  215. {
  216.    USHORT i;
  217.    ULONG Test;
  218.  
  219.    Center ();
  220.    SetWindowTitle ("New Users Security");
  221.  
  222.    SPBM_SetLimits (102, 65535L, 0L);
  223.    SPBM_SetCurrentValue (102, Cfg->NewUserLevel);
  224.  
  225.    for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  226.       if (Cfg->NewUserFlags & Test)
  227.          BM_SetCheck (i, TRUE);
  228.    }
  229.    for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  230.       if (Cfg->NewUserDenyFlags & Test)
  231.          BM_SetCheck (i, TRUE);
  232.    }
  233.  
  234.    return (TRUE);
  235. }
  236.  
  237. VOID CNewUserSecurityDlg::OnOK (VOID)
  238. {
  239.    USHORT i;
  240.    ULONG Test;
  241.  
  242.    Cfg->NewUserLevel = (USHORT)SPBM_QueryValue (102);
  243.  
  244.    Cfg->NewUserFlags = 0L;
  245.    for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  246.       if (BM_QueryCheck (i) == TRUE)
  247.          Cfg->NewUserFlags |= Test;
  248.    }
  249.    Cfg->NewUserDenyFlags = 0L;
  250.    for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  251.       if (BM_QueryCheck (i) == TRUE)
  252.          Cfg->NewUserDenyFlags |= Test;
  253.    }
  254.  
  255.    EndDialog (TRUE);
  256. }
  257.  
  258. // ----------------------------------------------------------------------
  259. // Menu files editor
  260. // ----------------------------------------------------------------------
  261.  
  262. typedef struct {
  263.    USHORT Id;
  264.    PSZ    Text;
  265. } MENUCMD;
  266.  
  267. // Moving between menu
  268. MENUCMD MenuCmd1[] = {
  269.    MNU_GOTO,       "Goto menu          ",
  270.    MNU_GOSUB,      "Gosub menu         ",
  271.    MNU_RETURN,     "Return to previous ",
  272.    MNU_CLEARSTACK, "Clear menu stack   ",
  273.    MNU_CLEARGOSUB, "Clear gosub menu   ",
  274.    MNU_CLEARGOTO,  "Clear goto menu    ",
  275.    MNU_RETURNMAIN, "Return to MAIN menu",
  276.    0, NULL
  277. };
  278.  
  279. // Message areas
  280. MENUCMD MenuCmd2[] = {
  281.    MNU_MSGSELECT,       "Change message area      ",
  282.    MNU_MSGDELETE,       "Kill message             ",
  283.    MNU_MSGWRITE,        "Edit new message         ",
  284.    MNU_MSGREPLY,        "Reply to message         ",
  285.    MNU_MSGBRIEFLIST,    "Short message list       ",
  286.    MNU_MSGFORWARD,      "Read next message        ",
  287.    MNU_MSGBACKWARD,     "Read previous message    ",
  288.    MNU_MSGREADNONSTOP,  "Read message non-stop    ",
  289.    MNU_INQUIRETEXT,     "Inquire messages         ",
  290.    MNU_MSGINDIVIDUAL,   "Read individual message  ",
  291.    MNU_MSGTITLELIST,    "Verbose message list     ",
  292.    MNU_MSGLISTNEWAREAS, "List areas w/new messages",
  293.    MNU_MSGREAD,         "Read messages            ",
  294.    MNU_INQUIREPERSONAL, "Inquire personal messages",
  295.    MNU_MSGMODIFY,       "Change message           ",
  296.    MNU_MSGUNRECEIVE,    "Unreceive message        ",
  297.    MNU_MSGREADORIGINAL, "Read original message    ",
  298.    MNU_MSGREADREPLY,    "Read reply message       ",
  299.    MNU_MSGREADCURRENT,  "Read current message     ",
  300.    MNU_TOGGLEKLUDGES,   "Toggle kludges lines     ",
  301.    0, NULL
  302. };
  303.  
  304. // File areas
  305. MENUCMD MenuCmd3[] = {
  306.    MNU_FILENAMELIST, "File list",
  307.    MNU_FILEDOWNLOAD, "Download file",
  308.    MNU_FILETEXTLIST, "Locate files",
  309.    MNU_FILEUPLOAD, "Upload file",
  310.    MNU_FILENEWLIST, "New files list",
  311.    MNU_FILEDOWNLOADANY, "Download from any area",
  312.    MNU_FILEDELETE, "Kill files",
  313.    MNU_FILESELECT, "Change file area",
  314.    MNU_SEARCHFILENAME, "Locate files by name",
  315.    MNU_FILEKEYWORDLIST, "Locate files by keyword",
  316.    MNU_FILEDATELIST, "File list by date",
  317.    MNU_FILEDOWNLOADLIST, "Download list of files",
  318.    MNU_FILEUPLOADUSER, "Upload file to user",
  319.    MNU_FILEDISPLAY, "File Display",
  320.    MNU_ADDTAGGED, "Tag files",
  321.    MNU_DELETETAGGED, "Delete tagged files",
  322.    MNU_LISTTAGGED, "List tagged files",
  323.    MNU_DELETEALLTAGGED, "Delete all tagged files",
  324.    0, NULL
  325. };
  326.  
  327. // User configuration
  328. MENUCMD MenuCmd4[] = {
  329.    MNU_SETLANGUAGE, "Change language",
  330.    MNU_SETPASSWORD, "Set password",
  331.    MNU_TOGGLEANSI, "Toggle ANSI graphics",
  332.    MNU_TOGGLEAVATAR, "Toggle AVATAR graphics",
  333.    MNU_TOGGLECOLOR, "Toggle COLOR codes",
  334.    MNU_TOGGLEHOTKEY, "Toggle hot-keyed menu",
  335.    MNU_SETCOMPANY, "Set company name",
  336.    MNU_SETADDRESS, "Set address",
  337.    MNU_SETCITY, "Set city",
  338.    MNU_SETPHONE, "Set phone number",
  339.    MNU_SETGENDER, "Set gender",
  340.    MNU_TOGGLEFULLSCREEN, "Toggle fullscreen lists",
  341.    MNU_TOGGLEIBMCHARS, "Toggle IBM characters",
  342.    MNU_TOGGLEMOREPROMPT, "Toggle More? prompt",
  343.    MNU_TOGGLESCREENCLEAR, "Toggle screen clear",
  344.    MNU_TOGGLEINUSERLIST, "Toggle in user list",
  345.    MNU_SETARCHIVER, "Set default archiver",
  346.    MNU_SETPROTOCOL, "Set default protocol",
  347.    MNU_SETSIGNATURE, "Set personal signature",
  348.    MNU_SETVIDEOMODE, "Set video mode",
  349.    MNU_TOGGLEFULLED, "Toggle fullscreen editor",
  350.    MNU_TOGGLEFULLREAD, "Toggle fullscreen reader",
  351.    MNU_TOGGLENODISTURB, "Toggle do not disturb flag",
  352.    MNU_TOGGLEMAILCHECK, "Toggle logon mail check",
  353.    MNU_TOGGLEFILECHECK, "Toggle new files check",
  354.    MNU_SETBIRTHDATE, "Set birthdate",
  355.    MNU_SETSCREENLENGTH, "Set screen length",
  356.    MNU_TOGGLERIP, "Toggle RIP graphics",
  357.    0, NULL
  358. };
  359.  
  360. // Personal mail
  361. MENUCMD MenuCmd5[] = {
  362.    MNU_MAILWRITELOCAL,    "Write local mail    ",
  363.    MNU_MAILWRITEINTERNET, "Write Internet mail ",
  364.    MNU_MAILREAD,          "Read mail           ",
  365.    MNU_MAILDELETE,        "Kill mail           ",
  366.    MNU_MAILLIST,          "List mail           ",
  367.    MNU_MAILWRITEFIDONET,  "Write FidoNet mail  ",
  368.    MNU_MAILCHECK,         "Check unread mail   ",
  369.    MNU_MAILNEXT,          "Read next mail      ",
  370.    MNU_MAILPREVIOUS,      "Read previous mail  ",
  371.    MNU_MAILINDIVIDUAL,    "Read individual mail",
  372.    MNU_MAILNONSTOP,       "Read mail non-stop  ",
  373.    MNU_MAILREPLY,         "Reply mail          ",
  374.    0, NULL
  375. };
  376.  
  377. // Offline reader
  378. MENUCMD MenuCmd6[] = {
  379.    MNU_OLRTAGAREA, "Tag areas",
  380.    MNU_OLRDOWNLOADASCII, "ASCII download",
  381.    MNU_OLRUPLOAD, "Upload replies",
  382.    MNU_OLRDOWNLOADQWK, "QWK download",
  383.    MNU_OLRDOWNLOADBW, "BlueWave download",
  384.    MNU_OLRDOWNLOADPNT, "PointMail download",
  385.    MNU_OLRREMOVEAREA, "Untag areas",
  386.    MNU_OLRVIEWTAGGED, "View tagged areas",
  387.    MNU_OLRRESTRICTDATE, "Restrict date",
  388.    0, NULL
  389. };
  390.  
  391.    // Miscellaneous
  392. MENUCMD MenuCmd7[] = {
  393.    MNU_DISPLAY, "Display file (anywhere)",
  394.    MNU_NULL, "Display only",
  395.    MNU_LOGOFF, "Logoff",
  396.    MNU_VERSION, "Version information",
  397.    MNU_RUNEXTERNAL, "Run external program",
  398.    MNU_PRESSENTER, "Press Enter to Continue",
  399.    MNU_FINGER, "Finger",
  400.    MNU_FTP, "FTP client",
  401.    MNU_IRC, "IRC client",
  402.    MNU_APPENDMENU, "Append menu",
  403. //   MNU_GOPHER, "Gopher Client",
  404.    MNU_TELNET, "Telnet client",
  405.    MNU_ONLINEUSERS, "Users online",
  406.    0, NULL
  407. };
  408.  
  409. class CMenuSecurityDlg : public CDialog
  410. {
  411. public:
  412.    CMenuSecurityDlg (HWND p_hWnd);
  413.  
  414.    class  TMenu *Data;
  415.  
  416.    USHORT OnInitDialog (VOID);
  417.    VOID   OnOK (VOID);
  418. };
  419.  
  420. class CMenuPromptDlg : public CDialog
  421. {
  422. public:
  423.    CMenuPromptDlg (HWND p_hWnd);
  424.  
  425.    DECLARE_MESSAGE_MAP ()
  426.    class  TMenu *Menu;
  427.  
  428.    USHORT OnInitDialog (VOID);
  429.    VOID   OnOK (VOID);
  430.  
  431. private:
  432.    VOID   Color (VOID);
  433.    VOID   HilightColor (VOID);
  434. };
  435.  
  436. class CMenuListDlg : public CDialog
  437. {
  438. public:
  439.    CMenuListDlg (HWND p_hWnd);
  440.  
  441.    int    old_item;
  442.    class  TMenu *Data;
  443.  
  444.    VOID   OnCancel (VOID);
  445.    VOID   OnChanged (VOID);
  446.    USHORT OnInitDialog (VOID);
  447.    VOID   OnOK (VOID);
  448.  
  449. private:
  450.    CHAR   Temp[128];
  451.    DECLARE_MESSAGE_MAP ()
  452. };
  453.  
  454. class CMenuCommandDlg : public CDialog
  455. {
  456. public:
  457.    CMenuCommandDlg (HWND p_hWnd);
  458.  
  459.    USHORT id;
  460.    CHAR   text[64];
  461.  
  462.    USHORT OnInitDialog (VOID);
  463.    VOID   OnOK (VOID);
  464.  
  465. private:
  466.    DECLARE_MESSAGE_MAP ()
  467.  
  468.    VOID   Selection (VOID);
  469. };
  470.  
  471. BEGIN_MESSAGE_MAP (CMenuDlg, CDialog)
  472.    ON_COMMAND (115, Delete)
  473.    ON_COMMAND (117, Add)
  474.    ON_COMMAND (118, Previous)
  475.    ON_COMMAND (119, Next)
  476.    ON_COMMAND (120, Prompt)
  477.    ON_COMMAND (121, List)
  478.    ON_COMMAND (122, Security)
  479.    ON_COMMAND (123, Insert)
  480.    ON_COMMAND (124, HilightColor)
  481.    ON_COMMAND (125, Color)
  482.    ON_COMMAND (126, Command)
  483. END_MESSAGE_MAP ()
  484.  
  485. CMenuDlg::CMenuDlg (HWND p_hWnd) : CDialog ("8", p_hWnd)
  486. {
  487.    Menu = NULL;
  488. }
  489.  
  490. CMenuDlg::~CMenuDlg (void)
  491. {
  492.    if (Menu != NULL)
  493.       delete Menu;
  494. }
  495.  
  496. VOID CMenuDlg::OnHelp (VOID)
  497. {
  498.    WinHelp ("lora.hlp>h_ref", 8);
  499. }
  500.  
  501. USHORT CMenuDlg::OnInitDialog (VOID)
  502. {
  503.    CHAR Temp[128];
  504.  
  505.    FullFile[0] = '\0';
  506.  
  507. #if defined(__OS2__)
  508.    memset (&fild, 0, sizeof (FILEDLG));
  509.    fild.cbSize = sizeof (FILEDLG);
  510.    fild.fl = FDS_CENTER|FDS_OPEN_DIALOG;
  511.    fild.pszTitle = "Open Menu File";
  512.    sprintf (fild.szFullFile, "%s*.mnu", Cfg->MenuPath);
  513.  
  514.    WinFileDlg (HWND_DESKTOP, m_hWnd, &fild);
  515.    if (fild.lReturn == DID_OK) {
  516.       strcpy (FullFile, fild.szFullFile);
  517. #elif defined(__NT__)
  518.    OpenFileName.lStructSize = sizeof (OPENFILENAME);
  519.    OpenFileName.hwndOwner = m_hWnd;
  520.    OpenFileName.hInstance = NULL;
  521.    OpenFileName.lpstrFilter = "Menu files (*.mnu)\0*.mnu\0All files (*.*)\0*.*";
  522.    OpenFileName.lpstrCustomFilter = (LPTSTR) NULL;
  523.    OpenFileName.nMaxCustFilter = 0L;
  524.    OpenFileName.nFilterIndex = 1L;
  525.    sprintf (FullFile, "%s*.mnu", Cfg->MenuPath);
  526.    OpenFileName.lpstrFile = FullFile;
  527.    OpenFileName.nMaxFile = sizeof (FullFile) - 1;
  528.    OpenFileName.lpstrFileTitle = NULL;
  529.    OpenFileName.nMaxFileTitle = 0;
  530.    OpenFileName.lpstrInitialDir = NULL;
  531.    OpenFileName.lpstrTitle = "Open Menu File";
  532.    OpenFileName.nFileOffset = 0;
  533.    OpenFileName.nFileExtension = 0;
  534.    OpenFileName.lpstrDefExt = "mnu";
  535.    OpenFileName.lCustData = 0;
  536.    OpenFileName.Flags = OFN_HIDEREADONLY|OFN_LONGNAMES|OFN_CREATEPROMPT|OFN_NOCHANGEDIR;
  537.  
  538.    if (GetOpenFileName (&OpenFileName) == TRUE) {
  539. #endif
  540.       Center ();
  541.  
  542.       if ((Menu = new TMenu) != NULL) {
  543.          Menu->Load (FullFile);
  544.          if (Menu->First () == FALSE)
  545.             Menu->New (TRUE);
  546.       }
  547.  
  548.       sprintf (Temp, "Menu Editor - %s", FullFile);
  549.       SetWindowTitle (Temp);
  550.  
  551.       EM_SetTextLimit (102, sizeof (Menu->Display) - 1);
  552.       EM_SetTextLimit (108, sizeof (Menu->Key) - 1);
  553.       EM_SetTextLimit (112, sizeof (Menu->Argument) - 1);
  554.       SPBM_SetLimits (104, 255L, 0L);
  555.       SPBM_SetLimits (106, 255L, 0L);
  556.  
  557.       DisplayData ();
  558.    }
  559.    else
  560.       EndDialog (FALSE);
  561.  
  562.    return (TRUE);
  563. }
  564.  
  565. VOID CMenuDlg::OnOK (VOID)
  566. {
  567.    ReadData ();
  568.    Menu->Update ();
  569.    Menu->Save (FullFile);
  570.    SetFocus (102);
  571. }
  572.  
  573. VOID CMenuDlg::DisplayData (VOID)
  574. {
  575.    USHORT i;
  576.    CHAR Temp[64];
  577.  
  578.    SetDlgItemText (102, Menu->Display);
  579.    SPBM_SetCurrentValue (104, Menu->Color);
  580.    SPBM_SetCurrentValue (106, Menu->Hilight);
  581.    SetDlgItemText (108, Menu->Key);
  582.  
  583.    for (i = 0; MenuCmd1[i].Text != NULL; i++) {
  584.       if (MenuCmd1[i].Id == Menu->Command) {
  585.          sprintf (Temp, "%u - %s", MenuCmd1[i].Id, MenuCmd1[i].Text);
  586.          SetDlgItemText (110, Temp);
  587.          break;
  588.       }
  589.    }
  590.    for (i = 0; MenuCmd2[i].Text != NULL; i++) {
  591.       if (MenuCmd2[i].Id == Menu->Command) {
  592.          sprintf (Temp, "%u - %s", MenuCmd2[i].Id, MenuCmd2[i].Text);
  593.          SetDlgItemText (110, Temp);
  594.          break;
  595.       }
  596.    }
  597.    for (i = 0; MenuCmd3[i].Text != NULL; i++) {
  598.       if (MenuCmd3[i].Id == Menu->Command) {
  599.          sprintf (Temp, "%u - %s", MenuCmd3[i].Id, MenuCmd3[i].Text);
  600.          SetDlgItemText (110, Temp);
  601.          break;
  602.       }
  603.    }
  604.    for (i = 0; MenuCmd4[i].Text != NULL; i++) {
  605.       if (MenuCmd4[i].Id == Menu->Command) {
  606.          sprintf (Temp, "%u - %s", MenuCmd4[i].Id, MenuCmd4[i].Text);
  607.          SetDlgItemText (110, Temp);
  608.          break;
  609.       }
  610.    }
  611.    for (i = 0; MenuCmd5[i].Text != NULL; i++) {
  612.       if (MenuCmd5[i].Id == Menu->Command) {
  613.          sprintf (Temp, "%u - %s", MenuCmd5[i].Id, MenuCmd5[i].Text);
  614.          SetDlgItemText (110, Temp);
  615.          break;
  616.       }
  617.    }
  618.    for (i = 0; MenuCmd6[i].Text != NULL; i++) {
  619.       if (MenuCmd6[i].Id == Menu->Command) {
  620.          sprintf (Temp, "%u - %s", MenuCmd6[i].Id, MenuCmd6[i].Text);
  621.          SetDlgItemText (110, Temp);
  622.          break;
  623.       }
  624.    }
  625.    for (i = 0; MenuCmd7[i].Text != NULL; i++) {
  626.       if (MenuCmd7[i].Id == Menu->Command) {
  627.          sprintf (Temp, "%u - %s", MenuCmd7[i].Id, MenuCmd7[i].Text);
  628.          SetDlgItemText (110, Temp);
  629.          break;
  630.       }
  631.    }
  632.  
  633.    BM_SetCheck (113, Menu->Automatic);
  634.    BM_SetCheck (114, Menu->FirstTime);
  635.    SetDlgItemText (112, Menu->Argument);
  636. }
  637.  
  638. VOID CMenuDlg::ReadData (VOID)
  639. {
  640.    USHORT Value;
  641.  
  642.    GetDlgItemText (102, GetDlgItemTextLength (102), Menu->Display);
  643.    Menu->Color = (UCHAR)SPBM_QueryValue (104);
  644.    Menu->Hilight = (UCHAR)SPBM_QueryValue (106);
  645.    GetDlgItemText (108, GetDlgItemTextLength (108), Menu->Key);
  646.    GetDlgItemText (112, GetDlgItemTextLength (112), Menu->Argument);
  647.    Value = CB_QuerySelection (110);
  648. //   Menu->Command = MenuCmd[Value].Id;
  649.    Menu->Automatic = (UCHAR)BM_QueryCheck (113);
  650.    Menu->FirstTime = (UCHAR)BM_QueryCheck (114);
  651. }
  652.  
  653. VOID CMenuDlg::Next (VOID)
  654. {
  655.    ReadData ();
  656.    Menu->Update ();
  657.    if (Menu->Next () == TRUE)
  658.       DisplayData ();
  659.    SetFocus (102);
  660. }
  661.  
  662. VOID CMenuDlg::Previous (VOID)
  663. {
  664.    ReadData ();
  665.    Menu->Update ();
  666.    if (Menu->Previous () == TRUE)
  667.       DisplayData ();
  668.    SetFocus (102);
  669. }
  670.  
  671. VOID CMenuDlg::Add (VOID)
  672. {
  673.    ReadData ();
  674.    Menu->Update ();
  675.    Menu->New (FALSE);
  676.    Menu->Add ();
  677.    DisplayData ();
  678.    SetFocus (102);
  679. }
  680.  
  681. VOID CMenuDlg::Insert (VOID)
  682. {
  683.    ReadData ();
  684.    Menu->Update ();
  685.    Menu->New (FALSE);
  686.    Menu->Insert ();
  687.    DisplayData ();
  688.    SetFocus (102);
  689. }
  690.  
  691. VOID CMenuDlg::Delete (VOID)
  692. {
  693.    if (MessageBox ("Are you sure ?", "Delete", MB_YESNO|MB_ICONQUESTION) == IDYES) {
  694.       Menu->Delete ();
  695.       DisplayData ();
  696.       SetFocus (102);
  697.    }
  698. }
  699.  
  700. VOID CMenuDlg::Security (VOID)
  701. {
  702.    class CMenuSecurityDlg *Dlg;
  703.  
  704.    if ((Dlg = new CMenuSecurityDlg (m_hWnd)) != NULL) {
  705.       Dlg->Data = Menu;
  706.       Dlg->DoModal ();
  707.       delete Dlg;
  708.    }
  709. }
  710.  
  711. VOID CMenuDlg::Prompt (VOID)
  712. {
  713.    class CMenuPromptDlg *Dlg;
  714.  
  715.    if ((Dlg = new CMenuPromptDlg (m_hWnd)) != NULL) {
  716.       Dlg->Menu = Menu;
  717.       Dlg->DoModal ();
  718.       delete Dlg;
  719.    }
  720. }
  721.  
  722. VOID CMenuDlg::List (VOID)
  723. {
  724.    class CMenuListDlg *Dlg;
  725.  
  726.    ReadData ();
  727.    Menu->Update ();
  728.  
  729.    if ((Dlg = new CMenuListDlg (m_hWnd)) != NULL) {
  730.       Dlg->Data = Menu;
  731.       Dlg->DoModal ();
  732.       delete Dlg;
  733.  
  734.       DisplayData ();
  735.       SetFocus (102);
  736.    }
  737. }
  738.  
  739. VOID CMenuDlg::Color (VOID)
  740. {
  741.    class CColorDlg *Dlg;
  742.  
  743.    if ((Dlg = new CColorDlg (m_hWnd)) != NULL) {
  744.       Dlg->color = (UCHAR)SPBM_QueryValue (104);
  745.       if (Dlg->DoModal () == TRUE)
  746.          SPBM_SetCurrentValue (104, Dlg->color);
  747.       delete Dlg;
  748.    }
  749. }
  750.  
  751. VOID CMenuDlg::HilightColor (VOID)
  752. {
  753.    class CColorDlg *Dlg;
  754.  
  755.    if ((Dlg = new CColorDlg (m_hWnd)) != NULL) {
  756.       Dlg->color = (UCHAR)SPBM_QueryValue (106);
  757.       if (Dlg->DoModal () == TRUE)
  758.          SPBM_SetCurrentValue (106, Dlg->color);
  759.       delete Dlg;
  760.    }
  761. }
  762.  
  763. VOID CMenuDlg::Command (VOID)
  764. {
  765.    class CMenuCommandDlg *Dlg;
  766.  
  767.    if ((Dlg = new CMenuCommandDlg (m_hWnd)) != NULL) {
  768.       Dlg->id = Menu->Command;
  769.       if (Dlg->DoModal () == TRUE) {
  770.          Menu->Command = Dlg->id;
  771.          SetDlgItemText (110, Dlg->text);
  772.       }
  773.       delete Dlg;
  774.    }
  775. }
  776.  
  777. // ----------------------------------------------------------------------
  778.  
  779. BEGIN_MESSAGE_MAP (CMenuCommandDlg, CDialog)
  780. #if defined(__OS2__)
  781.    ON_CONTROL (LN_SELECT, 103, Selection)
  782. #elif defined(__NT__)
  783.    ON_NOTIFY (LBN_SELCHANGE, 103, Selection)
  784. #endif
  785. END_MESSAGE_MAP ()
  786.  
  787. CMenuCommandDlg::CMenuCommandDlg (HWND p_hWnd) : CDialog ("54", p_hWnd)
  788. {
  789.    id = 0;
  790. }
  791.  
  792. USHORT CMenuCommandDlg::OnInitDialog (VOID)
  793. {
  794.    int i;
  795.  
  796.    Center ();
  797.  
  798.    LM_AddString (103, "Moving Between Menus");
  799.    LM_AddString (103, "Message Areas");
  800.    LM_AddString (103, "File Areas");
  801.    LM_AddString (103, "User Configuration");
  802.    LM_AddString (103, "Personal Mail");
  803.    LM_AddString (103, "Offline Reader");
  804.    LM_AddString (103, "Miscellaneous");
  805.  
  806.    for (i = 0; MenuCmd1[i].Text != NULL; i++) {
  807.       if (MenuCmd1[i].Id == id) {
  808.          LM_SelectItem (103, 0);
  809.          LM_SelectItem (104, (USHORT)i);
  810.          break;
  811.       }
  812.    }
  813.    for (i = 0; MenuCmd2[i].Text != NULL; i++) {
  814.       if (MenuCmd2[i].Id == id) {
  815.          LM_SelectItem (103, 1);
  816.          LM_SelectItem (104, (USHORT)i);
  817.          break;
  818.       }
  819.    }
  820.    for (i = 0; MenuCmd3[i].Text != NULL; i++) {
  821.       if (MenuCmd3[i].Id == id) {
  822.          LM_SelectItem (103, 2);
  823.          LM_SelectItem (104, (USHORT)i);
  824.          break;
  825.       }
  826.    }
  827.    for (i = 0; MenuCmd4[i].Text != NULL; i++) {
  828.       if (MenuCmd4[i].Id == id) {
  829.          LM_SelectItem (103, 3);
  830.          LM_SelectItem (104, (USHORT)i);
  831.          break;
  832.       }
  833.    }
  834.    for (i = 0; MenuCmd5[i].Text != NULL; i++) {
  835.       if (MenuCmd5[i].Id == id) {
  836.          LM_SelectItem (103, 4);
  837.          LM_SelectItem (104, (USHORT)i);
  838.          break;
  839.       }
  840.    }
  841.    for (i = 0; MenuCmd6[i].Text != NULL; i++) {
  842.       if (MenuCmd6[i].Id == id) {
  843.          LM_SelectItem (103, 5);
  844.          LM_SelectItem (104, (USHORT)i);
  845.          break;
  846.       }
  847.    }
  848.    for (i = 0; MenuCmd7[i].Text != NULL; i++) {
  849.       if (MenuCmd7[i].Id == id) {
  850.          LM_SelectItem (103, 6);
  851.          LM_SelectItem (104, (USHORT)i);
  852.          break;
  853.       }
  854.    }
  855.  
  856. #if defined(__NT__)
  857.    Selection ();
  858. #endif
  859.  
  860.    return (TRUE);
  861. }
  862.  
  863. VOID CMenuCommandDlg::Selection (VOID)
  864. {
  865.    int i;
  866.    CHAR Temp[64];
  867.  
  868.    switch (LM_QuerySelection (103)) {
  869.       case 0:
  870.          LM_DeleteAll (104);
  871.          for (i = 0; MenuCmd1[i].Text != NULL; i++) {
  872.             sprintf (Temp, "%u - %s", MenuCmd1[i].Id, MenuCmd1[i].Text);
  873.             LM_AddString (104, Temp);
  874.          }
  875.          break;
  876.       case 1:
  877.          LM_DeleteAll (104);
  878.          for (i = 0; MenuCmd2[i].Text != NULL; i++) {
  879.             sprintf (Temp, "%u - %s", MenuCmd2[i].Id, MenuCmd2[i].Text);
  880.             LM_AddString (104, Temp);
  881.          }
  882.          break;
  883.       case 2:
  884.          LM_DeleteAll (104);
  885.          for (i = 0; MenuCmd3[i].Text != NULL; i++) {
  886.             sprintf (Temp, "%u - %s", MenuCmd3[i].Id, MenuCmd3[i].Text);
  887.             LM_AddString (104, Temp);
  888.          }
  889.          break;
  890.       case 3:
  891.          LM_DeleteAll (104);
  892.          for (i = 0; MenuCmd4[i].Text != NULL; i++) {
  893.             sprintf (Temp, "%u - %s", MenuCmd4[i].Id, MenuCmd4[i].Text);
  894.             LM_AddString (104, Temp);
  895.          }
  896.          break;
  897.       case 4:
  898.          LM_DeleteAll (104);
  899.          for (i = 0; MenuCmd5[i].Text != NULL; i++) {
  900.             sprintf (Temp, "%u - %s", MenuCmd5[i].Id, MenuCmd5[i].Text);
  901.             LM_AddString (104, Temp);
  902.          }
  903.          break;
  904.       case 5:
  905.          LM_DeleteAll (104);
  906.          for (i = 0; MenuCmd6[i].Text != NULL; i++) {
  907.             sprintf (Temp, "%u - %s", MenuCmd6[i].Id, MenuCmd6[i].Text);
  908.             LM_AddString (104, Temp);
  909.          }
  910.          break;
  911.       case 6:
  912.          LM_DeleteAll (104);
  913.          for (i = 0; MenuCmd7[i].Text != NULL; i++) {
  914.             sprintf (Temp, "%u - %s", MenuCmd7[i].Id, MenuCmd7[i].Text);
  915.             LM_AddString (104, Temp);
  916.          }
  917.          break;
  918.    }
  919. }
  920.  
  921. VOID CMenuCommandDlg::OnOK (VOID)
  922. {
  923.    USHORT item;
  924.  
  925.    item = LM_QuerySelection (104);
  926.  
  927.    switch (LM_QuerySelection (103)) {
  928.       case 0:
  929.          id = MenuCmd1[item].Id;
  930.          sprintf (text, "%u - %s", MenuCmd1[item].Id, MenuCmd1[item].Text);
  931.          break;
  932.       case 1:
  933.          id = MenuCmd2[item].Id;
  934.          sprintf (text, "%u - %s", MenuCmd2[item].Id, MenuCmd2[item].Text);
  935.          break;
  936.       case 2:
  937.          id = MenuCmd3[item].Id;
  938.          sprintf (text, "%u - %s", MenuCmd3[item].Id, MenuCmd3[item].Text);
  939.          break;
  940.       case 3:
  941.          id = MenuCmd4[item].Id;
  942.          sprintf (text, "%u - %s", MenuCmd4[item].Id, MenuCmd4[item].Text);
  943.          break;
  944.       case 4:
  945.          id = MenuCmd5[item].Id;
  946.          sprintf (text, "%u - %s", MenuCmd5[item].Id, MenuCmd5[item].Text);
  947.          break;
  948.       case 5:
  949.          id = MenuCmd6[item].Id;
  950.          sprintf (text, "%u - %s", MenuCmd6[item].Id, MenuCmd6[item].Text);
  951.          break;
  952.       case 6:
  953.          id = MenuCmd7[item].Id;
  954.          sprintf (text, "%u - %s", MenuCmd7[item].Id, MenuCmd7[item].Text);
  955.          break;
  956.    }
  957.  
  958.    EndDialog (TRUE);
  959. }
  960.  
  961. // ----------------------------------------------------------------------
  962.  
  963. CMenuSecurityDlg::CMenuSecurityDlg (HWND p_hWnd) : CDialog ("18", p_hWnd)
  964. {
  965. }
  966.  
  967. USHORT CMenuSecurityDlg::OnInitDialog (VOID)
  968. {
  969.    USHORT i;
  970.    ULONG Test;
  971.  
  972.    Center ();
  973.  
  974.    SPBM_SetLimits (102, 65535U, 0L);
  975.    SPBM_SetCurrentValue (102, Data->Level);
  976.  
  977.    for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  978.       if (Data->AccessFlags & Test)
  979.          BM_SetCheck (i, TRUE);
  980.    }
  981.    for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  982.       if (Data->DenyFlags & Test)
  983.          BM_SetCheck (i, TRUE);
  984.    }
  985.  
  986.    return (TRUE);
  987. }
  988.  
  989. VOID CMenuSecurityDlg::OnOK (VOID)
  990. {
  991.    USHORT i;
  992.    ULONG Test;
  993.  
  994.    Data->Level = (USHORT)SPBM_QueryValue (102);
  995.  
  996.    Data->AccessFlags = 0L;
  997.    for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  998.       if (BM_QueryCheck (i) == TRUE)
  999.          Data->AccessFlags |= Test;
  1000.    }
  1001.    Data->DenyFlags = 0L;
  1002.    for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  1003.       if (BM_QueryCheck (i) == TRUE)
  1004.          Data->DenyFlags |= Test;
  1005.    }
  1006.  
  1007.    EndDialog (TRUE);
  1008. }
  1009.  
  1010. // ----------------------------------------------------------------------
  1011.  
  1012. BEGIN_MESSAGE_MAP (CMenuPromptDlg, CDialog)
  1013.    ON_COMMAND (124, HilightColor)
  1014.    ON_COMMAND (125, Color)
  1015. END_MESSAGE_MAP ()
  1016.  
  1017. CMenuPromptDlg::CMenuPromptDlg (HWND p_hWnd) : CDialog ("19", p_hWnd)
  1018. {
  1019. }
  1020.  
  1021. USHORT CMenuPromptDlg::OnInitDialog (VOID)
  1022. {
  1023.    Center ();
  1024.  
  1025.    EM_SetTextLimit (102, sizeof (Menu->Prompt) - 1);
  1026.    SPBM_SetLimits (104, 255, 0);
  1027.    SPBM_SetLimits (106, 255, 0);
  1028.  
  1029.    SetDlgItemText (102, Menu->Prompt);
  1030.    SPBM_SetCurrentValue (104, Menu->PromptColor);
  1031.    SPBM_SetCurrentValue (106, Menu->PromptHilight);
  1032.  
  1033.    return (TRUE);
  1034. }
  1035.  
  1036. VOID CMenuPromptDlg::OnOK (VOID)
  1037. {
  1038.    GetDlgItemText (102, Menu->Prompt, GetDlgItemTextLength (102));
  1039.    Menu->PromptColor = (UCHAR)SPBM_QueryValue (104);
  1040.    Menu->PromptHilight = (UCHAR)SPBM_QueryValue (106);
  1041.  
  1042.    EndDialog (TRUE);
  1043. }
  1044.  
  1045. VOID CMenuPromptDlg::Color (VOID)
  1046. {
  1047.    class CColorDlg *Dlg;
  1048.  
  1049.    if ((Dlg = new CColorDlg (m_hWnd)) != NULL) {
  1050.       Dlg->color = (UCHAR)SPBM_QueryValue (104);
  1051.       if (Dlg->DoModal () == TRUE)
  1052.          SPBM_SetCurrentValue (104, Dlg->color);
  1053.       delete Dlg;
  1054.    }
  1055. }
  1056.  
  1057. VOID CMenuPromptDlg::HilightColor (VOID)
  1058. {
  1059.    class CColorDlg *Dlg;
  1060.  
  1061.    if ((Dlg = new CColorDlg (m_hWnd)) != NULL) {
  1062.       Dlg->color = (UCHAR)SPBM_QueryValue (106);
  1063.       if (Dlg->DoModal () == TRUE)
  1064.          SPBM_SetCurrentValue (106, Dlg->color);
  1065.       delete Dlg;
  1066.    }
  1067. }
  1068.  
  1069. // ----------------------------------------------------------------------
  1070.  
  1071. BEGIN_MESSAGE_MAP (CMenuListDlg, CDialog)
  1072.    ON_CONTROL (CN_ENTER, 101, OnOK)
  1073. END_MESSAGE_MAP ()
  1074.  
  1075. CMenuListDlg::CMenuListDlg (HWND p_hWnd) : CDialog ("25", p_hWnd)
  1076. {
  1077.    old_item = 0;
  1078. }
  1079.  
  1080. USHORT CMenuListDlg::OnInitDialog (VOID)
  1081. {
  1082.    int i;
  1083.    ULONG CrcCurrent, Crc;
  1084.  
  1085.    SetWindowTitle ("Menu List");
  1086.  
  1087.    LVM_AllocateColumns (101, 5);
  1088.    LVM_InsertColumn (101, "Display", LVC_LEFT);
  1089.    LVM_InsertColumn (101, "Key", LVC_LEFT);
  1090.    LVM_InsertColumn (101, "Level", LVC_RIGHT);
  1091.    LVM_InsertColumn (101, "Command", LVC_LEFT);
  1092.    LVM_InsertColumn (101, "Argument", LVC_LEFT);
  1093.  
  1094.    // Calcola il CRC di alcuni elementi chiave per determinare l'indice della voce
  1095.    // di menu' correntemente selezionata.
  1096.    CrcCurrent = StringCrc32 (Data->Display, 0xFFFFFFFFL);
  1097.    CrcCurrent = StringCrc32 (Data->Key, CrcCurrent);
  1098.    sprintf (Temp, "%u", Data->Command);
  1099.    CrcCurrent = StringCrc32 (Temp, CrcCurrent);
  1100.  
  1101.    i = 0;
  1102.    if (Data->First () == TRUE)
  1103.       do {
  1104.          LVM_InsertItem (101);
  1105.  
  1106.          LVM_SetItemText (101, 0, Data->Display);
  1107.          LVM_SetItemText (101, 1, Data->Key);
  1108.          sprintf (Temp, "%u", Data->Level);
  1109.          LVM_SetItemText (101, 2, Temp);
  1110.          LVM_SetItemText (101, 3, "");
  1111.          LVM_SetItemText (101, 4, Data->Argument);
  1112.  
  1113.          // Calcola il CRC di alcuni elementi chiavi per controllare se la voce
  1114.          // inserita e' quella correntemente selezionata nell'editor.
  1115.          Crc = StringCrc32 (Data->Display, 0xFFFFFFFFL);
  1116.          Crc = StringCrc32 (Data->Key, Crc);
  1117.          sprintf (Temp, "%u", Data->Command);
  1118.          Crc = StringCrc32 (Temp, Crc);
  1119.  
  1120.          // Se e' quella selezionata memorizza l'indice per l'uso mediante il
  1121.          // tasto cancel e per la selezione dell'elemento di default.
  1122.          if (Crc == CrcCurrent)
  1123.             old_item = i;
  1124.  
  1125.          i++;
  1126.       } while (Data->Next () == TRUE);
  1127.  
  1128.    LVM_InvalidateView (101);
  1129.    LVM_SelectItem (101, (USHORT)old_item);
  1130.  
  1131.    return (TRUE);
  1132. }
  1133.  
  1134. VOID CMenuListDlg::OnOK (VOID)
  1135. {
  1136.    int i, item;
  1137.  
  1138.    if ((item = LVM_QuerySelectedItem (101)) == -1)
  1139.       item = old_item;
  1140.  
  1141.    Data->First ();
  1142.    for (i = 0; i < item; i++)
  1143.       Data->Next ();
  1144.  
  1145.    EndDialog (TRUE);
  1146. }
  1147.  
  1148. VOID CMenuListDlg::OnCancel (VOID)
  1149. {
  1150.    int i;
  1151.  
  1152.    Data->First ();
  1153.    for (i = 0; i < old_item; i++)
  1154.       Data->Next ();
  1155.  
  1156.    EndDialog (TRUE);
  1157. }
  1158.  
  1159. // ----------------------------------------------------------------------
  1160. // File areas configuration
  1161. // ----------------------------------------------------------------------
  1162.  
  1163. class CFileSecurityDlg : public CDialog
  1164. {
  1165. public:
  1166.    CFileSecurityDlg (HWND p_hWnd);
  1167.  
  1168.    class  TFileData *Data;
  1169.  
  1170.    USHORT OnInitDialog (VOID);
  1171.    VOID   OnOK (VOID);
  1172. };
  1173.  
  1174. class CFileListDlg : public CDialog
  1175. {
  1176. public:
  1177.    CFileListDlg (HWND p_hWnd);
  1178.  
  1179.    USHORT Found;
  1180.    CHAR   Area[32];
  1181.    CHAR   Search[128];
  1182.  
  1183.    VOID   OnChanged (VOID);
  1184.    USHORT OnInitDialog (VOID);
  1185.    VOID   OnOK (VOID);
  1186.  
  1187. private:
  1188.    int    Selected;
  1189.    CHAR   Temp[128];
  1190.    DECLARE_MESSAGE_MAP ()
  1191. };
  1192.  
  1193. class CAddFileDlg : public CDialog
  1194. {
  1195. public:
  1196.    CAddFileDlg (HWND p_hWnd);
  1197.  
  1198.    CHAR   Key[16];
  1199.    CHAR   Description[128];
  1200.  
  1201.    USHORT OnInitDialog (VOID);
  1202.    VOID   OnOK (VOID);
  1203. };
  1204.  
  1205. class CFileAskStringDlg : public CDialog
  1206. {
  1207. public:
  1208.    CFileAskStringDlg (HWND p_hWnd);
  1209.  
  1210.    CHAR   String[128];
  1211.  
  1212.    USHORT OnInitDialog (VOID);
  1213.    VOID   OnOK (VOID);
  1214. };
  1215.  
  1216. class CFileEchoLinkDlg : public CDialog
  1217. {
  1218. public:
  1219.    CFileEchoLinkDlg (HWND p_hWnd);
  1220.  
  1221.    class  TFileData *Data;
  1222.  
  1223.    VOID   OnCancel (VOID);
  1224.    USHORT OnInitDialog (VOID);
  1225.    VOID   OnOK (VOID);
  1226.  
  1227. private:
  1228.    CHAR   OldSelect[64];
  1229.    class  TFilechoLink *Link;
  1230.    DECLARE_MESSAGE_MAP ()
  1231.  
  1232.    VOID   Add (VOID);
  1233.    VOID   Delete (VOID);
  1234.    VOID   SelChanged (VOID);
  1235. };
  1236.  
  1237. BEGIN_MESSAGE_MAP (CFileDlg, CDialog)
  1238.    ON_COMMAND (109, Security)
  1239.    ON_COMMAND (115, OnAdd)
  1240.    ON_COMMAND (116, OnInsert)
  1241.    ON_COMMAND (117, List)
  1242.    ON_COMMAND (118, OnPrevious)
  1243.    ON_COMMAND (119, OnNext)
  1244.    ON_COMMAND (120, OnDelete)
  1245.    ON_COMMAND (121, Links)
  1246.    ON_COMMAND (122, Search)
  1247.    ON_COMMAND (124, Move)
  1248. END_MESSAGE_MAP()
  1249.  
  1250. CFileDlg::CFileDlg (HWND p_hWnd) : CDialog ("10", p_hWnd)
  1251. {
  1252.    Data = NULL;
  1253. }
  1254.  
  1255. CFileDlg::~CFileDlg (void)
  1256. {
  1257.    if (Data != NULL)
  1258.       delete Data;
  1259. }
  1260.  
  1261. VOID CFileDlg::OnHelp (VOID)
  1262. {
  1263.    WinHelp ("lora.hlp>h_ref", 10);
  1264. }
  1265.  
  1266. VOID CFileDlg::DisplayData (VOID)
  1267. {
  1268.    SetDlgItemText (102, Data->Key);
  1269.    SetDlgItemText (104, Data->Display);
  1270.    SetDlgItemText (106, Data->Upload);
  1271.    SetDlgItemText (108, Data->Download);
  1272.    BM_SetCheck (113, Data->ShowGlobal);
  1273.    BM_SetCheck (123, Data->FreeDownload);
  1274.    BM_SetCheck (114, Data->CdRom);
  1275.    SetDlgItemText (127, Data->EchoTag);
  1276. }
  1277.  
  1278. VOID CFileDlg::ReadData (VOID)
  1279. {
  1280.    GetDlgItemText (104, Data->Display, GetDlgItemTextLength (104));
  1281.    GetDlgItemText (106, Data->Upload, GetDlgItemTextLength (106));
  1282.    GetDlgItemText (108, Data->Download, GetDlgItemTextLength (108));
  1283.    Data->ShowGlobal = (UCHAR)BM_QueryCheck (113);
  1284.    Data->FreeDownload = (UCHAR)BM_QueryCheck (123);
  1285.    Data->CdRom = (UCHAR)BM_QueryCheck (114);
  1286.    GetDlgItemText (127, Data->EchoTag, GetDlgItemTextLength (127));
  1287. }
  1288.  
  1289. VOID CFileDlg::OnAdd (VOID)
  1290. {
  1291.    class CAddFileDlg *Dlg;
  1292.  
  1293.    if ((Dlg = new CAddFileDlg (m_hWnd)) != NULL) {
  1294.       if (Dlg->DoModal () == TRUE) {
  1295.          Data->New ();
  1296.          strcpy (Data->Key, Dlg->Key);
  1297.          strcpy (Data->Display, Dlg->Description);
  1298.          Data->Add ();
  1299.          DisplayData ();
  1300.       }
  1301.       delete Dlg;
  1302.    }
  1303.    SetFocus (102);
  1304. }
  1305.  
  1306. VOID CFileDlg::OnDelete (VOID)
  1307. {
  1308.    if (MessageBox ("Are you sure ?", "Delete", MB_YESNO|MB_ICONQUESTION) == IDYES) {
  1309.       Data->Delete ();
  1310.       SetFocus (102);
  1311.       DisplayData ();
  1312.    }
  1313. }
  1314.  
  1315. VOID CFileDlg::OnInsert (VOID)
  1316. {
  1317.    class CAddFileDlg *Dlg;
  1318.  
  1319.    if ((Dlg = new CAddFileDlg (m_hWnd)) != NULL) {
  1320.       if (Dlg->DoModal () == TRUE) {
  1321.          Data->New ();
  1322.          strcpy (Data->Key, Dlg->Key);
  1323.          strcpy (Data->Display, Dlg->Description);
  1324.          Data->Insert ();
  1325.          DisplayData ();
  1326.       }
  1327.       delete Dlg;
  1328.    }
  1329.    SetFocus (102);
  1330. }
  1331.  
  1332. USHORT CFileDlg::OnInitDialog (VOID)
  1333. {
  1334.    Center ();
  1335.    Data = new TFileData (Cfg->SystemPath);
  1336.  
  1337.    EM_SetTextLimit (102, sizeof (Data->Key) - 1);
  1338.    EM_SetTextLimit (104, sizeof (Data->Display) - 1);
  1339.    EM_SetTextLimit (106, sizeof (Data->Upload) - 1);
  1340.    EM_SetTextLimit (108, sizeof (Data->Download) - 1);
  1341.    EM_SetTextLimit (127, sizeof (Data->EchoTag) - 1);
  1342.  
  1343.    if (Data->First () == FALSE)
  1344.       Data->New ();
  1345.  
  1346.    DisplayData ();
  1347.  
  1348.    return (TRUE);
  1349. }
  1350.  
  1351. VOID CFileDlg::OnPrevious (VOID)
  1352. {
  1353.    if (Data->Previous () == TRUE)
  1354.       DisplayData ();
  1355. }
  1356.  
  1357. VOID CFileDlg::OnNext (VOID)
  1358. {
  1359.    if (Data->Next () == TRUE)
  1360.       DisplayData ();
  1361. }
  1362.  
  1363. VOID CFileDlg::OnOK (VOID)
  1364. {
  1365.    CHAR Temp[32];
  1366.    class TFileBase *File;
  1367.    class TUser *User;
  1368.  
  1369.    ReadData ();
  1370.    GetDlgItemText (102, GetDlgItemTextLength (102), Temp);
  1371.    if (strcmp (Temp, Data->Key)) {
  1372.       if ((File = new TFileBase (Cfg->SystemPath, "")) != NULL) {
  1373.          Data->ActiveFiles = File->ChangeLibrary (Data->Key, Temp);
  1374.          delete File;
  1375.       }
  1376.       if ((User = new TUser (Cfg->UserFile)) != NULL) {
  1377.          User->FileTag->Change (Data->Key, Temp);
  1378.          delete User;
  1379.       }
  1380.    }
  1381.  
  1382.    Data->Update (Temp);
  1383. }
  1384.  
  1385. VOID CFileDlg::Security (VOID)
  1386. {
  1387.    class CFileSecurityDlg *Dlg;
  1388.  
  1389.    if ((Dlg = new CFileSecurityDlg (m_hWnd)) != NULL) {
  1390.       Dlg->Data = Data;
  1391.       Dlg->DoModal ();
  1392.       delete Dlg;
  1393.    }
  1394. }
  1395.  
  1396. VOID CFileDlg::List (VOID)
  1397. {
  1398.    class CFileListDlg *Dlg;
  1399.  
  1400.    if ((Dlg = new CFileListDlg (m_hWnd)) != NULL) {
  1401.       strcpy (Dlg->Area, Data->Key);
  1402.       if (Dlg->DoModal () == TRUE) {
  1403.          Data->Read (Dlg->Area, FALSE);
  1404.          DisplayData ();
  1405.       }
  1406.       delete Dlg;
  1407.    }
  1408. }
  1409.  
  1410. VOID CFileDlg::Move (VOID)
  1411. {
  1412.    CHAR Key[32];
  1413.    class CFileListDlg *Dlg;
  1414.    class TFileData *NewData;
  1415.  
  1416.    Key[0] = '\0';
  1417.    if ((Dlg = new CFileListDlg (m_hWnd)) != NULL) {
  1418.       strcpy (Dlg->Area, Data->Key);
  1419.       if (Dlg->DoModal () == TRUE) {
  1420.          if ((NewData = new TFileData (Cfg->SystemPath)) != NULL) {
  1421.             NewData->Read (Data->Key);
  1422.             NewData->Delete ();
  1423.             strcpy (Key, NewData->Key);
  1424.             NewData->Read (Dlg->Area);
  1425.             NewData->Insert (Data);
  1426.             delete NewData;
  1427.          }
  1428.          if (Data->Read (Key, FALSE) == FALSE)
  1429.             Data->Read (Dlg->Area, FALSE);
  1430.          DisplayData ();
  1431.       }
  1432.       delete Dlg;
  1433.    }
  1434. }
  1435.  
  1436. VOID CFileDlg::Search (VOID)
  1437. {
  1438.    class CFileListDlg *Dlg;
  1439.    class CFileAskStringDlg *Ask;
  1440.  
  1441.    if ((Ask = new CFileAskStringDlg (m_hWnd)) != NULL) {
  1442.       if (Ask->DoModal () == TRUE) {
  1443.          if ((Dlg = new CFileListDlg (m_hWnd)) != NULL) {
  1444.             strcpy (Dlg->Search, Ask->String);
  1445.             Dlg->Found = FALSE;
  1446.             strcpy (Dlg->Area, Data->Key);
  1447.             if (Dlg->DoModal () == TRUE) {
  1448.                Data->Read (Dlg->Area, FALSE);
  1449.                DisplayData ();
  1450.             }
  1451.             delete Dlg;
  1452.          }
  1453.       }
  1454.       delete Ask;
  1455.    }
  1456. }
  1457.  
  1458. VOID CFileDlg::Links (VOID)
  1459. {
  1460.    class CFileEchoLinkDlg *Dlg;
  1461.  
  1462.    if ((Dlg = new CFileEchoLinkDlg (m_hWnd)) != NULL) {
  1463.       Dlg->Data = Data;
  1464.       Dlg->DoModal ();
  1465.       delete Dlg;
  1466.    }
  1467. }
  1468.  
  1469. // ----------------------------------------------------------------------
  1470.  
  1471. CFileSecurityDlg::CFileSecurityDlg (HWND p_hWnd) : CDialog ("16", p_hWnd)
  1472. {
  1473. }
  1474.  
  1475. USHORT CFileSecurityDlg::OnInitDialog (VOID)
  1476. {
  1477.    USHORT i;
  1478.    ULONG Test;
  1479.  
  1480.    Center ();
  1481.  
  1482.    SPBM_SetLimits (102, 65535U, 0L);
  1483.    SPBM_SetCurrentValue (102, Data->Level);
  1484.  
  1485.    for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  1486.       if (Data->AccessFlags & Test)
  1487.          BM_SetCheck (i, TRUE);
  1488.    }
  1489.    for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  1490.       if (Data->DenyFlags & Test)
  1491.          BM_SetCheck (i, TRUE);
  1492.    }
  1493.  
  1494.    SPBM_SetLimits (173, 65535U, 0L);
  1495.    SPBM_SetCurrentValue (173, Data->DownloadLevel);
  1496.  
  1497.    for (i = 174, Test = 0x80000000L; i <= 205; i++, Test >>= 1) {
  1498.       if (Data->DownloadFlags & Test)
  1499.          BM_SetCheck (i, TRUE);
  1500.    }
  1501.    for (i = 207, Test = 0x80000000L; i <= 238; i++, Test >>= 1) {
  1502.       if (Data->DownloadDenyFlags & Test)
  1503.          BM_SetCheck (i, TRUE);
  1504.    }
  1505.  
  1506.    SPBM_SetLimits (242, 65535U, 0L);
  1507.    SPBM_SetCurrentValue (242, Data->UploadLevel);
  1508.  
  1509.    for (i = 243, Test = 0x80000000L; i <= 274; i++, Test >>= 1) {
  1510.       if (Data->UploadFlags & Test)
  1511.          BM_SetCheck (i, TRUE);
  1512.    }
  1513.    for (i = 276, Test = 0x80000000L; i <= 307; i++, Test >>= 1) {
  1514.       if (Data->UploadDenyFlags & Test)
  1515.          BM_SetCheck (i, TRUE);
  1516.    }
  1517.  
  1518.    return (TRUE);
  1519. }
  1520.  
  1521. VOID CFileSecurityDlg::OnOK (VOID)
  1522. {
  1523.    USHORT i;
  1524.    ULONG Test;
  1525.  
  1526.    Data->Level = (USHORT)SPBM_QueryValue (102);
  1527.  
  1528.    Data->AccessFlags = 0L;
  1529.    for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  1530.       if (BM_QueryCheck (i) == TRUE)
  1531.          Data->AccessFlags |= Test;
  1532.    }
  1533.    Data->DenyFlags = 0L;
  1534.    for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  1535.       if (BM_QueryCheck (i) == TRUE)
  1536.          Data->DenyFlags |= Test;
  1537.    }
  1538.  
  1539.    Data->DownloadLevel = (USHORT)SPBM_QueryValue (173);
  1540.  
  1541.    Data->DownloadFlags = 0L;
  1542.    for (i = 174, Test = 0x80000000L; i <= 205; i++, Test >>= 1) {
  1543.       if (BM_QueryCheck (i) == TRUE)
  1544.          Data->DownloadFlags |= Test;
  1545.    }
  1546.    Data->DownloadDenyFlags = 0L;
  1547.    for (i = 207, Test = 0x80000000L; i <= 238; i++, Test >>= 1) {
  1548.       if (BM_QueryCheck (i) == TRUE)
  1549.          Data->DownloadDenyFlags |= Test;
  1550.    }
  1551.  
  1552.    Data->UploadLevel = (USHORT)SPBM_QueryValue (242);
  1553.  
  1554.    Data->UploadFlags = 0L;
  1555.    for (i = 243, Test = 0x80000000L; i <= 274; i++, Test >>= 1) {
  1556.       if (BM_QueryCheck (i) == TRUE)
  1557.          Data->UploadFlags |= Test;
  1558.    }
  1559.    Data->UploadDenyFlags = 0L;
  1560.    for (i = 276, Test = 0x80000000L; i <= 307; i++, Test >>= 1) {
  1561.       if (BM_QueryCheck (i) == TRUE)
  1562.          Data->UploadDenyFlags |= Test;
  1563.    }
  1564.  
  1565.    EndDialog (TRUE);
  1566. }
  1567.  
  1568. // ----------------------------------------------------------------------
  1569.  
  1570. BEGIN_MESSAGE_MAP (CFileListDlg, CDialog)
  1571.    ON_CONTROL (CN_ENTER, 101, OnOK)
  1572. END_MESSAGE_MAP ()
  1573.  
  1574. CFileListDlg::CFileListDlg (HWND p_hWnd) : CDialog ("25", p_hWnd)
  1575. {
  1576.    Search[0] = '\0';
  1577.    Found = TRUE;
  1578.    Selected = -1;
  1579. }
  1580.  
  1581. USHORT CFileListDlg::OnInitDialog (VOID)
  1582. {
  1583.    USHORT i = 0, select = 0;
  1584.    class TFileData *File;
  1585.  
  1586.    SetWindowTitle ("File Areas List");
  1587.  
  1588.    LVM_AllocateColumns (101, 5);
  1589.    LVM_InsertColumn (101, "Key", LVC_LEFT);
  1590.    LVM_InsertColumn (101, "Level", LVC_RIGHT);
  1591.    LVM_InsertColumn (101, "Download", LVC_RIGHT);
  1592.    LVM_InsertColumn (101, "Upload", LVC_RIGHT);
  1593.    LVM_InsertColumn (101, "Description", LVC_LEFT);
  1594.  
  1595.    strupr (Search);
  1596.  
  1597.    if ((File = new TFileData (Cfg->SystemPath)) != NULL) {
  1598.       if (File->First () == TRUE)
  1599.          do {
  1600.             if (Search[0] != '\0') {
  1601.                strcpy (Temp, File->Key);
  1602.                if (strstr (strupr (Temp), Search) == NULL) {
  1603.                   strcpy (Temp, File->Display);
  1604.                   if (strstr (strupr (Temp), Search) == NULL)
  1605.                      continue;
  1606.                }
  1607.                Found = TRUE;
  1608.             }
  1609.  
  1610.             LVM_InsertItem (101);
  1611.  
  1612.             if (!strcmp (File->Key, Area))
  1613.                select = i;
  1614.             i++;
  1615.  
  1616.             LVM_SetItemText (101, 0, File->Key);
  1617.             sprintf (Temp, "%u", File->Level);
  1618.             LVM_SetItemText (101, 1, Temp);
  1619.             sprintf (Temp, "%u", File->DownloadLevel);
  1620.             LVM_SetItemText (101, 2, Temp);
  1621.             sprintf (Temp, "%u", File->UploadLevel);
  1622.             LVM_SetItemText (101, 3, Temp);
  1623.             LVM_SetItemText (101, 4, File->Display);
  1624.          } while (File->Next () == TRUE);
  1625.       delete File;
  1626.    }
  1627.  
  1628.    LVM_InvalidateView (101);
  1629.  
  1630.    if (Found == FALSE) {
  1631.       MessageBox ("There are no areas that match the search parameters.", "File area search", MB_OK);
  1632.       EndDialog (FALSE);
  1633.    }
  1634.    else
  1635.       LVM_SelectItem (101, select);
  1636.  
  1637.    return (TRUE);
  1638. }
  1639.  
  1640. VOID CFileListDlg::OnOK (VOID)
  1641. {
  1642.    int item;
  1643.  
  1644.    if ((item = LVM_QuerySelectedItem (101)) != -1)
  1645.       LVM_QueryItemText (101, item, 0, Area);
  1646.  
  1647.    EndDialog (TRUE);
  1648. }
  1649.  
  1650. // ----------------------------------------------------------------------
  1651.  
  1652. CFileAskStringDlg::CFileAskStringDlg (HWND p_hWnd) : CDialog ("26", p_hWnd)
  1653. {
  1654. }
  1655.  
  1656. USHORT CFileAskStringDlg::OnInitDialog (VOID)
  1657. {
  1658.    Center ();
  1659.  
  1660.    SetWindowTitle ("Search File Area");
  1661.    EM_SetTextLimit (128, sizeof (String) - 1);
  1662.  
  1663.    return (TRUE);
  1664. }
  1665.  
  1666. VOID CFileAskStringDlg::OnOK (VOID)
  1667. {
  1668.    GetDlgItemText (128, GetDlgItemTextLength (128), String);
  1669.    EndDialog (TRUE);
  1670. }
  1671.  
  1672. // ----------------------------------------------------------------------
  1673.  
  1674. CAddFileDlg::CAddFileDlg (HWND p_hWnd) : CDialog ("35", p_hWnd)
  1675. {
  1676. }
  1677.  
  1678. USHORT CAddFileDlg::OnInitDialog (VOID)
  1679. {
  1680.    Center ();
  1681.  
  1682.    EM_SetTextLimit (102, sizeof (Key) - 1);
  1683.    EM_SetTextLimit (104, sizeof (Description) - 1);
  1684.  
  1685.    return (TRUE);
  1686. }
  1687.  
  1688. VOID CAddFileDlg::OnOK (VOID)
  1689. {
  1690.    GetDlgItemText (102, GetDlgItemTextLength (102), Key);
  1691.    GetDlgItemText (104, GetDlgItemTextLength (104), Description);
  1692.  
  1693.    EndDialog (TRUE);
  1694. }
  1695.  
  1696. // ----------------------------------------------------------------------
  1697.  
  1698. BEGIN_MESSAGE_MAP (CFileEchoLinkDlg, CDialog)
  1699.    ON_COMMAND (102, Add)
  1700.    ON_COMMAND (103, Delete)
  1701. #if defined(__OS2__)
  1702.    ON_CONTROL (LN_SELECT, 101, SelChanged)
  1703. #elif defined(__NT__)
  1704.    ON_NOTIFY (LBN_SELCHANGE, 101, SelChanged)
  1705. #endif
  1706. END_MESSAGE_MAP ()
  1707.  
  1708. CFileEchoLinkDlg::CFileEchoLinkDlg (HWND p_hWnd) : CDialog ("37", p_hWnd)
  1709. {
  1710.    OldSelect[0] = '\0';
  1711. }
  1712.  
  1713. USHORT CFileEchoLinkDlg::OnInitDialog (VOID)
  1714. {
  1715.    Center ();
  1716.  
  1717.    SetDlgItemText (128, "");
  1718.    if ((Link = new TFilechoLink (Cfg->SystemPath)) != NULL) {
  1719.       Link->Load (Data->EchoTag);
  1720.       if (Link->First () == TRUE)
  1721.          do {
  1722.             LM_AddString (101, Link->Address);
  1723.          } while (Link->Next () == TRUE);
  1724.    }
  1725.  
  1726.    return (TRUE);
  1727. }
  1728.  
  1729. VOID CFileEchoLinkDlg::SelChanged (VOID)
  1730. {
  1731.    USHORT item;
  1732.    CHAR Temp[64];
  1733.  
  1734.    if (Link->Check (OldSelect) == TRUE) {
  1735.       Link->ReceiveOnly = (UCHAR)BM_QueryCheck (104);
  1736.       Link->SendOnly = (UCHAR)BM_QueryCheck (105);
  1737.       Link->PersonalOnly = (UCHAR)BM_QueryCheck (106);
  1738.       Link->Passive = (UCHAR)BM_QueryCheck (107);
  1739.       Link->Update ();
  1740.    }
  1741.  
  1742.    if ((item = LM_QuerySelection (101)) >= 0) {
  1743.       LM_QueryItemText (101, item, sizeof (Temp), Temp);
  1744.       if (Link->Check (Temp) == TRUE) {
  1745.          BM_SetCheck (104, Link->ReceiveOnly);
  1746.          BM_SetCheck (105, Link->SendOnly);
  1747.          BM_SetCheck (106, Link->PersonalOnly);
  1748.          BM_SetCheck (107, Link->Passive);
  1749.       }
  1750.       strcpy (OldSelect, Temp);
  1751.    }
  1752. }
  1753.  
  1754. VOID CFileEchoLinkDlg::OnOK (VOID)
  1755. {
  1756.    if (Link != NULL) {
  1757.       Link->Save ();
  1758.       delete Link;
  1759.    }
  1760.  
  1761.    EndDialog (TRUE);
  1762. }
  1763.  
  1764. VOID CFileEchoLinkDlg::OnCancel (VOID)
  1765. {
  1766.    if (Link != NULL)
  1767.       delete Link;
  1768.  
  1769.    EndDialog (FALSE);
  1770. }
  1771.  
  1772. VOID CFileEchoLinkDlg::Add (VOID)
  1773. {
  1774.    CHAR Temp[128];
  1775.  
  1776.    GetDlgItemText (128, GetDlgItemTextLength (128), Temp);
  1777.    if (Temp[0] != '\0') {
  1778.       LM_AddString (101, Temp);
  1779.       Link->AddString (Temp);
  1780.    }
  1781.    SetDlgItemText (128, "");
  1782.    SetFocus (128);
  1783. }
  1784.  
  1785. VOID CFileEchoLinkDlg::Delete (VOID)
  1786. {
  1787.    USHORT item;
  1788.  
  1789.    if (MessageBox ("Are you sure ?", "Delete", MB_YESNO) == IDYES) {
  1790.       item = LM_QuerySelection (101);
  1791.       LM_DeleteItem (101, item);
  1792.    }
  1793. }
  1794. #endif
  1795.  
  1796. // ----------------------------------------------------------------------
  1797. // Message areas configuration
  1798. // ----------------------------------------------------------------------
  1799.  
  1800. class CMessageSecurityDlg : public CDialog
  1801. {
  1802. public:
  1803.    CMessageSecurityDlg (HWND p_hWnd);
  1804.  
  1805.    class  TMsgData *Data;
  1806.  
  1807.    USHORT OnInitDialog (VOID);
  1808.    VOID   OnOK (VOID);
  1809. };
  1810.  
  1811. class CMessageListDlg : public CDialog
  1812. {
  1813. public:
  1814.    CMessageListDlg (HWND p_hWnd);
  1815.  
  1816.    USHORT Found;
  1817.    CHAR   Area[32];
  1818.    CHAR   Search[128];
  1819.  
  1820.    VOID   OnChanged (VOID);
  1821.    USHORT OnInitDialog (VOID);
  1822.    VOID   OnOK (VOID);
  1823.  
  1824. private:
  1825.    int    Selected;
  1826.    CHAR   Temp[128];
  1827.    DECLARE_MESSAGE_MAP ()
  1828. };
  1829.  
  1830. class CAddMessageDlg : public CDialog
  1831. {
  1832. public:
  1833.    CAddMessageDlg (HWND p_hWnd);
  1834.  
  1835.    CHAR   Key[16];
  1836.    CHAR   Description[128];
  1837.  
  1838.    USHORT OnInitDialog (VOID);
  1839.    VOID   OnOK (VOID);
  1840. };
  1841.  
  1842. class CAskStringDlg : public CDialog
  1843. {
  1844. public:
  1845.    CAskStringDlg (HWND p_hWnd);
  1846.  
  1847.    CHAR   String[128];
  1848.  
  1849.    USHORT OnInitDialog (VOID);
  1850.    VOID   OnOK (VOID);
  1851. };
  1852.  
  1853. class CEchoLinkDlg : public CDialog
  1854. {
  1855. public:
  1856.    CEchoLinkDlg (HWND p_hWnd);
  1857.  
  1858.    class  TMsgData *Data;
  1859.  
  1860.    USHORT OnInitDialog (VOID);
  1861.    VOID   OnOK (VOID);
  1862.    VOID   OnCancel (VOID);
  1863.  
  1864. private:
  1865.    CHAR   OldSelect[64];
  1866.    class  TEchoLink *Link;
  1867.    DECLARE_MESSAGE_MAP ()
  1868.  
  1869.    VOID   Add (VOID);
  1870.    VOID   Delete (VOID);
  1871.    VOID   SelChanged (VOID);
  1872. };
  1873.  
  1874. BEGIN_MESSAGE_MAP (CMessageDlg, CDialog)
  1875.    ON_COMMAND (115, OnAdd)
  1876.    ON_COMMAND (116, OnInsert)
  1877.    ON_COMMAND (117, List)
  1878.    ON_COMMAND (118, OnPrevious)
  1879.    ON_COMMAND (119, OnNext)
  1880.    ON_COMMAND (120, OnDelete)
  1881.    ON_COMMAND (122, Search)
  1882.    ON_COMMAND (121, Links)
  1883.    ON_COMMAND (123, Security)
  1884.    ON_COMMAND (124, Move)
  1885. END_MESSAGE_MAP()
  1886.  
  1887. CMessageDlg::CMessageDlg (HWND p_hWnd) : CDialog ("9", p_hWnd)
  1888. {
  1889.    Data = NULL;
  1890. }
  1891.  
  1892. CMessageDlg::~CMessageDlg (void)
  1893. {
  1894.    if (Data != NULL)
  1895.       delete Data;
  1896. }
  1897.  
  1898. VOID CMessageDlg::OnHelp (VOID)
  1899. {
  1900.    WinHelp ("lora.hlp>h_ref", 9);
  1901. }
  1902.  
  1903. USHORT CMessageDlg::OnInitDialog (VOID)
  1904. {
  1905.    FILE *fp;
  1906.    CHAR Temp[128];
  1907.  
  1908.    Center ();
  1909.    Data = new TMsgData (Cfg->SystemPath);
  1910.  
  1911.    EM_SetTextLimit (102, sizeof (Data->Key) - 1);
  1912.    EM_SetTextLimit (104, sizeof (Data->Display) - 1);
  1913.    EM_SetTextLimit (106, sizeof (Data->Path) - 1);
  1914.    EM_SetTextLimit (126, sizeof (Data->EchoTag) - 1);
  1915.    EM_SetTextLimit (128, sizeof (Data->NewsGroup) - 1);
  1916.    EM_SetTextLimit (111, sizeof (Data->Origin) - 1);
  1917.  
  1918.    CB_AddString (107, "Squish<tm>");
  1919.    CB_AddString (107, "JAM");
  1920.    CB_AddString (107, "Fido (*.msg)");
  1921.    CB_AddString (107, "AdeptXBBS");
  1922.    CB_AddString (107, "Hudson");
  1923.    CB_AddString (107, "USENET Newsgroup");
  1924.    CB_AddString (107, "Passthrough");
  1925.  
  1926.    SPBM_SetLimits (138, 5000L, 0L);
  1927.    SPBM_SetLimits (136, 366L, 0L);
  1928.    SPBM_SetLimits (140, 999999L, 0L);
  1929.    SPBM_SetLimits (145, 255L, 1L);
  1930.  
  1931.    if (Cfg->MailAddress.First () == TRUE)
  1932.       do {
  1933.          CB_AddString (110, Cfg->MailAddress.String);
  1934.       } while (Cfg->MailAddress.Next () == TRUE);
  1935.  
  1936.    CB_AddString (111, "<DEFAULT>");
  1937.    CB_AddString (111, "<RANDOM>");
  1938.  
  1939.    sprintf (Temp, "%sorigin.txt", Cfg->SystemPath);
  1940.    if ((fp = fopen (Temp, "rt")) != NULL) {
  1941.       while (fgets (Temp, sizeof (Temp) - 1, fp) != NULL) {
  1942.          if (Temp[strlen (Temp) - 1] == '\n')
  1943.             Temp[strlen (Temp) - 1] = '\0';
  1944.          CB_AddString (111, Temp);
  1945.       }
  1946.       fclose (fp);
  1947.    }
  1948.  
  1949.    if (Data->First () == FALSE)
  1950.       Data->New ();
  1951.  
  1952.    DisplayData ();
  1953.  
  1954.    return (TRUE);
  1955. }
  1956.  
  1957. VOID CMessageDlg::DisplayData (VOID)
  1958. {
  1959.    SetDlgItemText (102, Data->Key);
  1960.    SetDlgItemText (104, Data->Display);
  1961.    SetDlgItemText (106, Data->Path);
  1962.    switch (Data->Storage) {
  1963.       case ST_SQUISH:
  1964.          CB_SelectItem (107, 0);
  1965.          break;
  1966.       case ST_JAM:
  1967.          CB_SelectItem (107, 1);
  1968.          break;
  1969.       case ST_FIDO:
  1970.          CB_SelectItem (107, 2);
  1971.          break;
  1972.       case ST_ADEPT:
  1973.          CB_SelectItem (107, 3);
  1974.          break;
  1975.       case ST_HUDSON:
  1976.          CB_SelectItem (107, 4);
  1977.          break;
  1978.       case ST_USENET:
  1979.          CB_SelectItem (107, 5);
  1980.          break;
  1981.       case ST_PASSTHROUGH:
  1982.          CB_SelectItem (107, 6);
  1983.          break;
  1984.    }
  1985.    BM_SetCheck (113, Data->ShowGlobal);
  1986.    BM_SetCheck (114, Data->Offline);
  1987.    BM_SetCheck (129, Data->EchoMail);
  1988.    BM_SetCheck (130, Data->UpdateNews);
  1989.    SetDlgItemText (126, Data->EchoTag);
  1990.    SetDlgItemText (128, Data->NewsGroup);
  1991.    SPBM_SetCurrentValue (138, Data->MaxMessages);
  1992.    SPBM_SetCurrentValue (136, Data->DaysOld);
  1993.    SPBM_SetCurrentValue (140, Data->Highest);
  1994.    SetDlgItemText (110, Data->Address);
  1995.    SPBM_SetCurrentValue (145, Data->Board);
  1996.    if (Data->Origin[0] != '\0')
  1997.       SetDlgItemText (111, Data->Origin);
  1998.    else if (Data->OriginIndex == OIDX_DEFAULT)
  1999.       SetDlgItemText (111, "<DEFAULT>");
  2000.    else if (Data->OriginIndex == OIDX_RANDOM)
  2001.       SetDlgItemText (111, "<RANDOM>");
  2002.    else
  2003.       CB_SelectItem (111, (USHORT)(Data->OriginIndex + 1));
  2004. }
  2005.  
  2006. VOID CMessageDlg::ReadData (VOID)
  2007. {
  2008.    FILE *fp;
  2009.    USHORT index;
  2010.    CHAR Temp[128];
  2011.  
  2012.    GetDlgItemText (104, GetDlgItemTextLength (104), Data->Display);
  2013.    GetDlgItemText (106, GetDlgItemTextLength (106), Data->Path);
  2014.    switch (CB_QuerySelection (107)) {
  2015.       case 0:
  2016.          Data->Storage = ST_SQUISH;
  2017.          break;
  2018.       case 1:
  2019.          Data->Storage = ST_JAM;
  2020.          break;
  2021.       case 2:
  2022.          Data->Storage = ST_FIDO;
  2023.          break;
  2024.       case 3:
  2025.          Data->Storage = ST_ADEPT;
  2026.          break;
  2027.       case 4:
  2028.          Data->Storage = ST_HUDSON;
  2029.          break;
  2030.       case 5:
  2031.          Data->Storage = ST_USENET;
  2032.          break;
  2033.       case 6:
  2034.          Data->Storage = ST_PASSTHROUGH;
  2035.          break;
  2036.    }
  2037.    Data->ShowGlobal = (CHAR)BM_QueryCheck (113);
  2038.    Data->Offline = (CHAR)BM_QueryCheck (114);
  2039.    Data->EchoMail = (CHAR)BM_QueryCheck (129);
  2040.    Data->UpdateNews = (CHAR)BM_QueryCheck (130);
  2041.    GetDlgItemText (126, GetDlgItemTextLength (126), Data->EchoTag);
  2042.    GetDlgItemText (128, GetDlgItemTextLength (128), Data->NewsGroup);
  2043.    Data->MaxMessages = (USHORT)SPBM_QueryValue (138);
  2044.    Data->DaysOld = (USHORT)SPBM_QueryValue (136);
  2045.    Data->Highest = SPBM_QueryValue (140);
  2046.    GetDlgItemText (110, GetDlgItemTextLength (110), Data->Address);
  2047.    GetDlgItemText (111, GetDlgItemTextLength (111), Temp);
  2048.    Data->Board = (USHORT)SPBM_QueryValue (145);
  2049.    Data->Origin[0] = '\0';
  2050.    if (!strcmp (Temp, "<DEFAULT>"))
  2051.       Data->OriginIndex = OIDX_DEFAULT;
  2052.    else if (!strcmp (Temp, "<RANDOM>"))
  2053.       Data->OriginIndex = OIDX_RANDOM;
  2054.    else {
  2055.       strcpy (Data->Origin, Temp);
  2056.  
  2057.       sprintf (Temp, "%sorigin.txt", Cfg->SystemPath);
  2058.       if ((fp = fopen (Temp, "rt")) != NULL) {
  2059.          index = 1;
  2060.          while (fgets (Temp, sizeof (Temp) - 1, fp) != NULL) {
  2061.             if (Temp[strlen (Temp) - 1] == '\n')
  2062.                Temp[strlen (Temp) - 1] = '\0';
  2063.             if (!strcmp (Temp, Data->Origin)) {
  2064.                Data->OriginIndex = index;
  2065.                Data->Origin[0] = '\0';
  2066.                break;
  2067.             }
  2068.             index++;
  2069.          }
  2070.          fclose (fp);
  2071.       }
  2072.    }
  2073. }
  2074.  
  2075. VOID CMessageDlg::OnAdd (VOID)
  2076. {
  2077.    class CAddMessageDlg *Dlg;
  2078.  
  2079.    if ((Dlg = new CAddMessageDlg (m_hWnd)) != NULL) {
  2080.       if (Dlg->DoModal () == TRUE) {
  2081.          Data->New ();
  2082.          strcpy (Data->Key, Dlg->Key);
  2083.          strcpy (Data->Display, Dlg->Description);
  2084.          Data->Storage = Cfg->NewAreasStorage;
  2085.          strcpy (Data->Path, Cfg->NewAreasPath);
  2086.          strcat (Data->Path, Data->Key);
  2087.          Data->Level = Cfg->NewAreasLevel;
  2088.          Data->AccessFlags = Cfg->NewAreasFlags;
  2089.          Data->DenyFlags = Cfg->NewAreasDenyFlags;
  2090.          Data->WriteLevel = Cfg->NewAreasWriteLevel;
  2091.          Data->WriteFlags = Cfg->NewAreasWriteFlags;
  2092.          Data->DenyWriteFlags = Cfg->NewAreasDenyWriteFlags;
  2093.          Data->MaxMessages = 200;
  2094.          Data->DaysOld = 14;
  2095.          Data->Add ();
  2096.          DisplayData ();
  2097.       }
  2098.       delete Dlg;
  2099.    }
  2100.    SetFocus (102);
  2101. }
  2102.  
  2103. VOID CMessageDlg::OnDelete (VOID)
  2104. {
  2105.    if (MessageBox ("Are you sure ?", "Delete", MB_YESNO|MB_ICONQUESTION) == IDYES) {
  2106.       Data->Delete ();
  2107.       SetFocus (102);
  2108.       DisplayData ();
  2109.    }
  2110. }
  2111.  
  2112. VOID CMessageDlg::OnInsert (VOID)
  2113. {
  2114.    class CAddMessageDlg *Dlg;
  2115.  
  2116.    if ((Dlg = new CAddMessageDlg (m_hWnd)) != NULL) {
  2117.       if (Dlg->DoModal () == TRUE) {
  2118.          Data->New ();
  2119.          strcpy (Data->Key, Dlg->Key);
  2120.          strcpy (Data->Display, Dlg->Description);
  2121.          Data->Storage = Cfg->NewAreasStorage;
  2122.          strcpy (Data->Path, Cfg->NewAreasPath);
  2123.          strcat (Data->Path, Data->Key);
  2124.          Data->Level = Cfg->NewAreasLevel;
  2125.          Data->AccessFlags = Cfg->NewAreasFlags;
  2126.          Data->DenyFlags = Cfg->NewAreasDenyFlags;
  2127.          Data->WriteLevel = Cfg->NewAreasWriteLevel;
  2128.          Data->WriteFlags = Cfg->NewAreasWriteFlags;
  2129.          Data->DenyWriteFlags = Cfg->NewAreasDenyWriteFlags;
  2130.          Data->MaxMessages = 200;
  2131.          Data->DaysOld = 14;
  2132.          Data->Insert ();
  2133.          DisplayData ();
  2134.       }
  2135.       delete Dlg;
  2136.    }
  2137.    SetFocus (102);
  2138. }
  2139.  
  2140. VOID CMessageDlg::OnPrevious (VOID)
  2141. {
  2142.    if (Data->Previous () == TRUE)
  2143.       DisplayData ();
  2144. }
  2145.  
  2146. VOID CMessageDlg::OnNext (VOID)
  2147. {
  2148.    if (Data->Next () == TRUE)
  2149.       DisplayData ();
  2150. }
  2151.  
  2152. VOID CMessageDlg::OnOK (VOID)
  2153. {
  2154.    CHAR Temp[32];
  2155.    class TUser *User;
  2156.  
  2157.    ReadData ();
  2158.    GetDlgItemText (102, GetDlgItemTextLength (102), Temp);
  2159.    if (stricmp (Data->Key, Temp)) {
  2160.       if ((User = new TUser (Cfg->UserFile)) != NULL) {
  2161.          User->MsgTag->Change (Data->Key, Temp);
  2162.          delete User;
  2163.       }
  2164.    }
  2165.  
  2166.    Data->Update (Temp);
  2167. }
  2168.  
  2169. VOID CMessageDlg::Security (VOID)
  2170. {
  2171.    class CMessageSecurityDlg *Dlg;
  2172.  
  2173.    if ((Dlg = new CMessageSecurityDlg (m_hWnd)) != NULL) {
  2174.       Dlg->Data = Data;
  2175.       Dlg->DoModal ();
  2176.       delete Dlg;
  2177.    }
  2178. }
  2179.  
  2180. VOID CMessageDlg::List (VOID)
  2181. {
  2182.    class CMessageListDlg *Dlg;
  2183.  
  2184.    if ((Dlg = new CMessageListDlg (m_hWnd)) != NULL) {
  2185.       strcpy (Dlg->Area, Data->Key);
  2186.       if (Dlg->DoModal () == TRUE) {
  2187.          Data->Read (Dlg->Area, FALSE);
  2188.          DisplayData ();
  2189.       }
  2190.       delete Dlg;
  2191.    }
  2192. }
  2193.  
  2194. VOID CMessageDlg::Move (VOID)
  2195. {
  2196.    CHAR Key[32];
  2197.    class CMessageListDlg *Dlg;
  2198.    class TMsgData *NewData;
  2199.  
  2200.    Key[0] = '\0';
  2201.    if ((Dlg = new CMessageListDlg (m_hWnd)) != NULL) {
  2202.       strcpy (Dlg->Area, Data->Key);
  2203.       if (Dlg->DoModal () == TRUE) {
  2204.          if ((NewData = new TMsgData (Cfg->SystemPath)) != NULL) {
  2205.             NewData->Read (Data->Key);
  2206.             NewData->Delete ();
  2207.             strcpy (Key, NewData->Key);
  2208.             NewData->Read (Dlg->Area);
  2209.             NewData->Insert (Data);
  2210.             delete NewData;
  2211.          }
  2212.          if (Data->Read (Key, FALSE) == FALSE)
  2213.             Data->Read (Dlg->Area, FALSE);
  2214.          DisplayData ();
  2215.       }
  2216.       delete Dlg;
  2217.    }
  2218. }
  2219.  
  2220. VOID CMessageDlg::Links (VOID)
  2221. {
  2222.    class CEchoLinkDlg *Dlg;
  2223.  
  2224.    if ((Dlg = new CEchoLinkDlg (m_hWnd)) != NULL) {
  2225.       Dlg->Data = Data;
  2226.       Dlg->DoModal ();
  2227.       delete Dlg;
  2228.    }
  2229. }
  2230.  
  2231. VOID CMessageDlg::Search (VOID)
  2232. {
  2233.    class CMessageListDlg *Dlg;
  2234.    class CAskStringDlg *Ask;
  2235.  
  2236.    if ((Ask = new CAskStringDlg (m_hWnd)) != NULL) {
  2237.       if (Ask->DoModal () == TRUE) {
  2238.          if ((Dlg = new CMessageListDlg (m_hWnd)) != NULL) {
  2239.             strcpy (Dlg->Search, Ask->String);
  2240.             Dlg->Found = FALSE;
  2241.             strcpy (Dlg->Area, Data->Key);
  2242.             if (Dlg->DoModal () == TRUE) {
  2243.                Data->Read (Dlg->Area, FALSE);
  2244.                DisplayData ();
  2245.             }
  2246.             delete Dlg;
  2247.          }
  2248.       }
  2249.       delete Ask;
  2250.    }
  2251. }
  2252.  
  2253. // ----------------------------------------------------------------------
  2254.  
  2255. CMessageSecurityDlg::CMessageSecurityDlg (HWND p_hWnd) : CDialog ("15", p_hWnd)
  2256. {
  2257. }
  2258.  
  2259. USHORT CMessageSecurityDlg::OnInitDialog (VOID)
  2260. {
  2261.    USHORT i;
  2262.    ULONG Test;
  2263.  
  2264.    Center ();
  2265.  
  2266.    SPBM_SetLimits (102, 65535U, 0L);
  2267.    SPBM_SetCurrentValue (102, Data->Level);
  2268.  
  2269.    for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  2270.       if (Data->AccessFlags & Test)
  2271.          BM_SetCheck (i, TRUE);
  2272.    }
  2273.    for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  2274.       if (Data->DenyFlags & Test)
  2275.          BM_SetCheck (i, TRUE);
  2276.    }
  2277.  
  2278.    SPBM_SetLimits (173, 65535U, 0L);
  2279.    SPBM_SetCurrentValue (173, Data->WriteLevel);
  2280.  
  2281.    for (i = 174, Test = 0x80000000L; i <= 205; i++, Test >>= 1) {
  2282.       if (Data->WriteFlags & Test)
  2283.          BM_SetCheck (i, TRUE);
  2284.    }
  2285.    for (i = 207, Test = 0x80000000L; i <= 238; i++, Test >>= 1) {
  2286.       if (Data->DenyWriteFlags & Test)
  2287.          BM_SetCheck (i, TRUE);
  2288.    }
  2289.  
  2290.    return (TRUE);
  2291. }
  2292.  
  2293. VOID CMessageSecurityDlg::OnOK (VOID)
  2294. {
  2295.    USHORT i;
  2296.    ULONG Test;
  2297.  
  2298.    Data->Level = (USHORT)SPBM_QueryValue (102);
  2299.  
  2300.    Data->AccessFlags = 0L;
  2301.    for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  2302.       if (BM_QueryCheck (i) == TRUE)
  2303.          Data->AccessFlags |= Test;
  2304.    }
  2305.    Data->DenyFlags = 0L;
  2306.    for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  2307.       if (BM_QueryCheck (i) == TRUE)
  2308.          Data->DenyFlags |= Test;
  2309.    }
  2310.  
  2311.    Data->WriteLevel = (USHORT)SPBM_QueryValue (173);
  2312.  
  2313.    Data->WriteFlags = 0L;
  2314.    for (i = 174, Test = 0x80000000L; i <= 205; i++, Test >>= 1) {
  2315.       if (BM_QueryCheck (i) == TRUE)
  2316.          Data->WriteFlags |= Test;
  2317.    }
  2318.    Data->DenyWriteFlags = 0L;
  2319.    for (i = 207, Test = 0x80000000L; i <= 238; i++, Test >>= 1) {
  2320.       if (BM_QueryCheck (i) == TRUE)
  2321.          Data->DenyWriteFlags |= Test;
  2322.    }
  2323.  
  2324.    EndDialog (TRUE);
  2325. }
  2326.  
  2327. // ----------------------------------------------------------------------
  2328.  
  2329. BEGIN_MESSAGE_MAP (CMessageListDlg, CDialog)
  2330.    ON_CONTROL (CN_ENTER, 101, OnOK)
  2331. END_MESSAGE_MAP ()
  2332.  
  2333. CMessageListDlg::CMessageListDlg (HWND p_hWnd) : CDialog ("25", p_hWnd)
  2334. {
  2335.    Search[0] = '\0';
  2336.    Found = TRUE;
  2337.    Selected = -1;
  2338. }
  2339.  
  2340. USHORT CMessageListDlg::OnInitDialog (VOID)
  2341. {
  2342.    USHORT i =  0, select = 0;
  2343.    class TMsgData *Msg;
  2344.  
  2345.    SetWindowTitle ("Message Areas List");
  2346.  
  2347.    LVM_AllocateColumns (101, 4);
  2348.    LVM_InsertColumn (101, "Key", LVC_LEFT);
  2349.    LVM_InsertColumn (101, "Level", LVC_RIGHT);
  2350.    LVM_InsertColumn (101, "Write", LVC_RIGHT);
  2351.    LVM_InsertColumn (101, "Description", LVC_LEFT);
  2352.  
  2353.    strupr (Search);
  2354.  
  2355.    if ((Msg = new TMsgData (Cfg->SystemPath)) != NULL) {
  2356.       if (Msg->First () == TRUE)
  2357.          do {
  2358.             if (Search[0] != '\0') {
  2359.                strcpy (Temp, Msg->Key);
  2360.                if (strstr (strupr (Temp), Search) == NULL) {
  2361.                   strcpy (Temp, Msg->Display);
  2362.                   if (strstr (strupr (Temp), Search) == NULL) {
  2363.                      strcpy (Temp, Msg->EchoTag);
  2364.                      if (strstr (strupr (Temp), Search) == NULL)
  2365.                         continue;
  2366.                   }
  2367.                }
  2368.                Found = TRUE;
  2369.             }
  2370.  
  2371.             LVM_InsertItem (101);
  2372.  
  2373.             if (!strcmp (Msg->Key, Area))
  2374.                select = i;
  2375.             i++;
  2376.  
  2377.             LVM_SetItemText (101, 0, Msg->Key);
  2378.             sprintf (Temp, "%u", Msg->Level);
  2379.             LVM_SetItemText (101, 1, Temp);
  2380.             sprintf (Temp, "%u", Msg->WriteLevel);
  2381.             LVM_SetItemText (101, 2, Temp);
  2382.             LVM_SetItemText (101, 3, Msg->Display);
  2383.          } while (Msg->Next () == TRUE);
  2384.       delete Msg;
  2385.    }
  2386.  
  2387.    LVM_InvalidateView (101);
  2388.  
  2389.    if (Found == FALSE) {
  2390.       MessageBox ("There are no areas that match the search parameters.", "Message area search", MB_OK);
  2391.       EndDialog (FALSE);
  2392.    }
  2393.    else
  2394.       LVM_SelectItem (101, select);
  2395.  
  2396.    return (TRUE);
  2397. }
  2398.  
  2399. VOID CMessageListDlg::OnOK (VOID)
  2400. {
  2401.    int item;
  2402.  
  2403.    if ((item = LVM_QuerySelectedItem (101)) != -1)
  2404.       LVM_QueryItemText (101, item, 0, Area);
  2405.  
  2406.    EndDialog (TRUE);
  2407. }
  2408.  
  2409. // ----------------------------------------------------------------------
  2410.  
  2411. CAskStringDlg::CAskStringDlg (HWND p_hWnd) : CDialog ("26", p_hWnd)
  2412. {
  2413. }
  2414.  
  2415. USHORT CAskStringDlg::OnInitDialog (VOID)
  2416. {
  2417.    Center ();
  2418.  
  2419.    SetWindowTitle ("Search Message Area");
  2420.    EM_SetTextLimit (128, sizeof (String) - 1);
  2421.  
  2422.    return (TRUE);
  2423. }
  2424.  
  2425. VOID CAskStringDlg::OnOK (VOID)
  2426. {
  2427.    GetDlgItemText (128, GetDlgItemTextLength (128), String);
  2428.    EndDialog (TRUE);
  2429. }
  2430.  
  2431. // ----------------------------------------------------------------------
  2432.  
  2433. BEGIN_MESSAGE_MAP (CEchoLinkDlg, CDialog)
  2434.    ON_COMMAND (102, Add)
  2435.    ON_COMMAND (103, Delete)
  2436. #if defined(__OS2__)
  2437.    ON_CONTROL (LN_SELECT, 101, SelChanged)
  2438. #elif defined(__NT__)
  2439.    ON_NOTIFY (LBN_SELCHANGE, 101, SelChanged)
  2440. #endif
  2441. END_MESSAGE_MAP ()
  2442.  
  2443. CEchoLinkDlg::CEchoLinkDlg (HWND p_hWnd) : CDialog ("24", p_hWnd)
  2444. {
  2445.    OldSelect[0] = '\0';
  2446. }
  2447.  
  2448. USHORT CEchoLinkDlg::OnInitDialog (VOID)
  2449. {
  2450.    Center ();
  2451.  
  2452.    SetDlgItemText (128, "");
  2453.    if ((Link = new TEchoLink (Cfg->SystemPath)) != NULL) {
  2454.       Link->Load (Data->EchoTag);
  2455.       if (Link->First () == TRUE) {
  2456.          BM_SetCheck (104, Link->ReceiveOnly);
  2457.          BM_SetCheck (105, Link->SendOnly);
  2458.          BM_SetCheck (106, Link->PersonalOnly);
  2459.          BM_SetCheck (107, Link->Passive);
  2460.          strcpy (OldSelect, Link->Address);
  2461.  
  2462.          do {
  2463.             LM_AddString (101, Link->Address);
  2464.          } while (Link->Next () == TRUE);
  2465.  
  2466.          LM_SelectItem (101, 0);
  2467.       }
  2468.    }
  2469.  
  2470.    return (TRUE);
  2471. }
  2472.  
  2473. VOID CEchoLinkDlg::OnOK (VOID)
  2474. {
  2475.    if (Link->Check (OldSelect) == TRUE) {
  2476.       Link->ReceiveOnly = (UCHAR)BM_QueryCheck (104);
  2477.       Link->SendOnly = (UCHAR)BM_QueryCheck (105);
  2478.       Link->PersonalOnly = (UCHAR)BM_QueryCheck (106);
  2479.       Link->Passive = (UCHAR)BM_QueryCheck (107);
  2480.       Link->Update ();
  2481.    }
  2482.  
  2483.    if (Link != NULL) {
  2484.       Link->Save ();
  2485.       delete Link;
  2486.    }
  2487.  
  2488.    EndDialog (TRUE);
  2489. }
  2490.  
  2491. VOID CEchoLinkDlg::OnCancel (VOID)
  2492. {
  2493.    if (Link != NULL)
  2494.       delete Link;
  2495.  
  2496.    EndDialog (FALSE);
  2497. }
  2498.  
  2499. VOID CEchoLinkDlg::Add (VOID)
  2500. {
  2501.    CHAR Temp[128];
  2502.  
  2503.    GetDlgItemText (128, GetDlgItemTextLength (128), Temp);
  2504.    if (Temp[0] != '\0') {
  2505.       LM_AddString (101, Temp);
  2506.       Link->AddString (Temp);
  2507.    }
  2508.    SetDlgItemText (128, "");
  2509.    SetFocus (128);
  2510. }
  2511.  
  2512. VOID CEchoLinkDlg::Delete (VOID)
  2513. {
  2514.    USHORT item;
  2515.    CHAR Temp[64];
  2516.  
  2517.    if (MessageBox ("Are you sure ?", "Delete", MB_YESNO) == IDYES) {
  2518.       if ((item = LM_QuerySelection (101)) >= 0) {
  2519.          LM_QueryItemText (101, item, sizeof (Temp), Temp);
  2520.          if (Link->Check (Temp) == TRUE)
  2521.             Link->Delete ();
  2522.          LM_DeleteItem (101, item);
  2523.  
  2524.          if (LM_QueryItemCount (101) > 0) {
  2525.             Link->First ();
  2526.             LM_SelectItem (101, 0);
  2527.             BM_SetCheck (104, Link->ReceiveOnly);
  2528.             BM_SetCheck (105, Link->SendOnly);
  2529.             BM_SetCheck (106, Link->PersonalOnly);
  2530.             BM_SetCheck (107, Link->Passive);
  2531.             strcpy (OldSelect, Link->Address);
  2532.          }
  2533.          else {
  2534.             BM_SetCheck (104, FALSE);
  2535.             BM_SetCheck (105, FALSE);
  2536.             BM_SetCheck (106, FALSE);
  2537.             BM_SetCheck (107, FALSE);
  2538.             OldSelect[0] = '\0';
  2539.          }
  2540.       }
  2541.    }
  2542.    SetFocus (128);
  2543. }
  2544.  
  2545. VOID CEchoLinkDlg::SelChanged (VOID)
  2546. {
  2547.    USHORT item;
  2548.    CHAR Temp[64];
  2549.  
  2550.    if (Link->Check (OldSelect) == TRUE) {
  2551.       Link->ReceiveOnly = (UCHAR)BM_QueryCheck (104);
  2552.       Link->SendOnly = (UCHAR)BM_QueryCheck (105);
  2553.       Link->PersonalOnly = (UCHAR)BM_QueryCheck (106);
  2554.       Link->Passive = (UCHAR)BM_QueryCheck (107);
  2555.       Link->Update ();
  2556.    }
  2557.  
  2558.    if ((item = LM_QuerySelection (101)) >= 0) {
  2559.       LM_QueryItemText (101, item, sizeof (Temp), Temp);
  2560.       if (Link->Check (Temp) == TRUE) {
  2561.          BM_SetCheck (104, Link->ReceiveOnly);
  2562.          BM_SetCheck (105, Link->SendOnly);
  2563.          BM_SetCheck (106, Link->PersonalOnly);
  2564.          BM_SetCheck (107, Link->Passive);
  2565.       }
  2566.       strcpy (OldSelect, Temp);
  2567.    }
  2568. }
  2569.  
  2570. // ----------------------------------------------------------------------
  2571.  
  2572. CAddMessageDlg::CAddMessageDlg (HWND p_hWnd) : CDialog ("35", p_hWnd)
  2573. {
  2574. }
  2575.  
  2576. USHORT CAddMessageDlg::OnInitDialog (VOID)
  2577. {
  2578.    Center ();
  2579.  
  2580.    EM_SetTextLimit (102, sizeof (Key) - 1);
  2581.    EM_SetTextLimit (104, sizeof (Description) - 1);
  2582.  
  2583.    return (TRUE);
  2584. }
  2585.  
  2586. VOID CAddMessageDlg::OnOK (VOID)
  2587. {
  2588.    GetDlgItemText (102, GetDlgItemTextLength (102), Key);
  2589.    GetDlgItemText (104, GetDlgItemTextLength (104), Description);
  2590.  
  2591.    EndDialog (TRUE);
  2592. }
  2593.  
  2594. #if !defined(__POINT__)
  2595. // ----------------------------------------------------------------------
  2596. // User limits
  2597. // ----------------------------------------------------------------------
  2598.  
  2599. class CSecurityDlg : public CDialog
  2600. {
  2601. public:
  2602.    CSecurityDlg (HWND p_hWnd);
  2603.  
  2604.    USHORT Level;
  2605.    ULONG  Flags;
  2606.    ULONG  DenyFlags;
  2607.  
  2608.    USHORT OnInitDialog (VOID);
  2609.    VOID   OnOK (VOID);
  2610. };
  2611.  
  2612. BEGIN_MESSAGE_MAP (CLimitsDlg, CDialog)
  2613.    ON_COMMAND (198, Add)
  2614.    ON_COMMAND (199, Delete)
  2615.    ON_COMMAND (200, Previous)
  2616.    ON_COMMAND (201, Next)
  2617. END_MESSAGE_MAP ()
  2618.  
  2619. CLimitsDlg::CLimitsDlg (HWND p_hWnd) : CDialog ("4", p_hWnd)
  2620. {
  2621.    Limits = NULL;
  2622. }
  2623.  
  2624. CLimitsDlg::~CLimitsDlg ()
  2625. {
  2626.    if (Limits != NULL)
  2627.       delete Limits;
  2628. }
  2629.  
  2630. VOID CLimitsDlg::OnHelp (VOID)
  2631. {
  2632.    WinHelp ("lora.hlp>h_ref", 4);
  2633. }
  2634.  
  2635. USHORT CLimitsDlg::OnInitDialog (VOID)
  2636. {
  2637.    Center ();
  2638.  
  2639.    Limits = new TLimits (Cfg->SystemPath);
  2640.  
  2641.    EM_SetTextLimit (102, sizeof (Limits->Key) - 1);
  2642.    EM_SetTextLimit (104, sizeof (Limits->Description) - 1);
  2643.  
  2644.    SPBM_SetLimits (132, 65535L, 0L);
  2645.    SPBM_SetLimits (126, 1440L, 0L);
  2646.    SPBM_SetLimits (128, 1440L, 0L);
  2647.    SPBM_SetLimits (113, 65535L, 0L);
  2648.    SPBM_SetLimits (115, 65535L, 0L);
  2649.    SPBM_SetLimits (117, 65535L, 0L);
  2650.    SPBM_SetLimits (119, 65535L, 0L);
  2651.    SPBM_SetLimits (121, 65535L, 0L);
  2652.    SPBM_SetLimits (123, 65535L, 0L);
  2653.    SPBM_SetLimits (109, 100L, 0L);
  2654.    SPBM_SetLimits (111, 65535L, 0L);
  2655.  
  2656.    CB_AddString (107, "300");
  2657.    CB_AddString (107, "1200");
  2658.    CB_AddString (107, "2400");
  2659.    CB_AddString (107, "9600");
  2660.    CB_AddString (107, "14400");
  2661.    CB_AddString (107, "28800");
  2662.    CB_AddString (107, "33600");
  2663.    CB_AddString (107, "56000");
  2664.    CB_AddString (107, "64000");
  2665.    CB_AddString (107, "128000");
  2666.    CB_AddString (107, "256000");
  2667.  
  2668.    if (Limits->First () == TRUE)
  2669.       DisplayData ();
  2670.  
  2671.    return (TRUE);
  2672. }
  2673.  
  2674. VOID CLimitsDlg::DisplayData (VOID)
  2675. {
  2676.    USHORT i;
  2677.    ULONG Test;
  2678.  
  2679.    SetDlgItemText (102, Limits->Key);
  2680.    SetDlgItemText (104, Limits->Description);
  2681.    switch (Limits->DownloadSpeed) {
  2682.       case 300L:
  2683.          CB_SelectItem (107, 0);
  2684.          break;
  2685.       case 1200L:
  2686.          CB_SelectItem (107, 1);
  2687.          break;
  2688.       case 2400L:
  2689.          CB_SelectItem (107, 2);
  2690.          break;
  2691.       case 9600L:
  2692.          CB_SelectItem (107, 3);
  2693.          break;
  2694.       case 14400L:
  2695.          CB_SelectItem (107, 4);
  2696.          break;
  2697.       case 28800L:
  2698.          CB_SelectItem (107, 5);
  2699.          break;
  2700.       case 33600L:
  2701.          CB_SelectItem (107, 6);
  2702.          break;
  2703.       case 56000L:
  2704.          CB_SelectItem (107, 7);
  2705.          break;
  2706.       case 64000L:
  2707.          CB_SelectItem (107, 8);
  2708.          break;
  2709.       case 128000L:
  2710.          CB_SelectItem (107, 9);
  2711.          break;
  2712.       case 256000L:
  2713.          CB_SelectItem (107, 10);
  2714.          break;
  2715.       default:
  2716.          CB_SelectItem (107, 1);
  2717.          break;
  2718.    }
  2719.    SPBM_SetCurrentValue (109, Limits->DownloadRatio);
  2720.    SPBM_SetCurrentValue (111, Limits->RatioStart);
  2721.    SPBM_SetCurrentValue (113, Limits->DownloadLimit);
  2722.    SPBM_SetCurrentValue (115, Limits->DownloadAt2400);
  2723.    SPBM_SetCurrentValue (117, Limits->DownloadAt9600);
  2724.    SPBM_SetCurrentValue (119, Limits->DownloadAt14400);
  2725.    SPBM_SetCurrentValue (121, Limits->DownloadAt28800);
  2726.    SPBM_SetCurrentValue (123, Limits->DownloadAt33600);
  2727.    SPBM_SetCurrentValue (126, Limits->CallTimeLimit);
  2728.    SPBM_SetCurrentValue (128, Limits->DayTimeLimit);
  2729.    SPBM_SetCurrentValue (132, Limits->Level);
  2730.    for (i = 133, Test = 0x80000000L; i <= 164; i++, Test >>= 1)
  2731.       BM_SetCheck (i, (Limits->Flags & Test) ? TRUE : FALSE);
  2732.    for (i = 166, Test = 0x80000000L; i <= 197; i++, Test >>= 1)
  2733.       BM_SetCheck (i, (Limits->Flags & Test) ? TRUE : FALSE);
  2734.  
  2735.    SetFocus (102);
  2736. }
  2737.  
  2738. VOID CLimitsDlg::OnOK (VOID)
  2739. {
  2740.    USHORT i;
  2741.    CHAR Temp[64];
  2742.    ULONG Test;
  2743.    class TUser *User;
  2744.  
  2745.    strcpy (Temp, Limits->Key);
  2746.    GetDlgItemText (102, GetDlgItemTextLength (102), Limits->Key);
  2747.    GetDlgItemText (104, GetDlgItemTextLength (104), Limits->Description);
  2748.    GetDlgItemText (107, GetDlgItemTextLength (107), Temp);
  2749.    Limits->DownloadSpeed = atol (Temp);
  2750.    Limits->DownloadRatio = (USHORT)SPBM_QueryValue (109);
  2751.    Limits->RatioStart = (USHORT)SPBM_QueryValue (111);
  2752.    Limits->DownloadLimit = (USHORT)SPBM_QueryValue (113);
  2753.    Limits->DownloadAt2400 = (USHORT)SPBM_QueryValue (115);
  2754.    Limits->DownloadAt9600 = (USHORT)SPBM_QueryValue (117);
  2755.    Limits->DownloadAt14400 = (USHORT)SPBM_QueryValue (119);
  2756.    Limits->DownloadAt28800 = (USHORT)SPBM_QueryValue (121);
  2757.    Limits->DownloadAt33600 = (USHORT)SPBM_QueryValue (123);
  2758.    Limits->CallTimeLimit = (USHORT)SPBM_QueryValue (126);
  2759.    Limits->DayTimeLimit = (USHORT)SPBM_QueryValue (128);
  2760.    Limits->Level = (USHORT)SPBM_QueryValue (132);
  2761.    Limits->Flags = 0L;
  2762.    for (i = 133, Test = 0x80000000L; i <= 164; i++, Test >>= 1) {
  2763.       if (BM_QueryCheck (i) == TRUE)
  2764.          Limits->Flags |= Test;
  2765.    }
  2766.    Limits->DenyFlags = 0L;
  2767.    for (i = 166, Test = 0x80000000L; i <= 197; i++, Test >>= 1) {
  2768.       if (BM_QueryCheck (i) == TRUE)
  2769.          Limits->DenyFlags |= Test;
  2770.    }
  2771.  
  2772.    Limits->Update ();
  2773.  
  2774.    if (stricmp (Temp, Limits->Key)) {
  2775.       if ((User = new TUser (Cfg->UserFile)) != NULL) {
  2776.          User->ChangeLimitClass (Temp, Limits->Key);
  2777.          delete User;
  2778.       }
  2779.    }
  2780. }
  2781.  
  2782. VOID CLimitsDlg::Delete (VOID)
  2783. {
  2784.    if (MessageBox ("Are you sure ?", "Delete", MB_YESNO|MB_ICONQUESTION) == IDYES) {
  2785.       Limits->Delete ();
  2786.       DisplayData ();
  2787.    }
  2788. }
  2789.  
  2790. VOID CLimitsDlg::Previous (VOID)
  2791. {
  2792.    if (Limits->Previous () == TRUE)
  2793.       DisplayData ();
  2794. }
  2795.  
  2796. VOID CLimitsDlg::Next (VOID)
  2797. {
  2798.    if (Limits->Next () == TRUE)
  2799.       DisplayData ();
  2800. }
  2801.  
  2802. VOID CLimitsDlg::Add (VOID)
  2803. {
  2804.    Limits->New ();
  2805.    Limits->Add ();
  2806.  
  2807.    DisplayData ();
  2808. }
  2809.  
  2810. // ----------------------------------------------------------------------
  2811. // General BBS configuration
  2812. // ----------------------------------------------------------------------
  2813.  
  2814. CBBSGeneralDlg::CBBSGeneralDlg (HWND p_hWnd) : CDialog ("22", p_hWnd)
  2815. {
  2816. }
  2817.  
  2818. VOID CBBSGeneralDlg::OnHelp (VOID)
  2819. {
  2820.    WinHelp ("lora.hlp>h_ref", 22);
  2821. }
  2822.  
  2823. USHORT CBBSGeneralDlg::OnInitDialog (VOID)
  2824. {
  2825.    Center ();
  2826.  
  2827.    EM_SetTextLimit (104, sizeof (Cfg->UserFile) - 1);
  2828.    EM_SetTextLimit (116, sizeof (Cfg->MenuPath) - 1);
  2829.    EM_SetTextLimit (112, sizeof (Cfg->TextFiles) - 1);
  2830.    EM_SetTextLimit (106, sizeof (Cfg->MailPath) - 1);
  2831.    EM_SetTextLimit (102, sizeof (Cfg->MainMenu) - 1);
  2832.    EM_SetTextLimit (113, sizeof (Cfg->UsersHomePath) - 1);
  2833.    EM_SetTextLimit (25, sizeof (Cfg->EditorCmd) - 1);
  2834.    SPBM_SetLimits (131, 255L, 1L);
  2835.  
  2836.    CB_AddString (107, "Squish<tm>");
  2837.    CB_AddString (107, "JAM");
  2838.    CB_AddString (107, "Fido (*.msg)");
  2839.    CB_AddString (107, "AdeptXBBS");
  2840.  
  2841.    SetDlgItemText (104, Cfg->UserFile);
  2842.    SetDlgItemText (116, Cfg->MenuPath);
  2843.    SetDlgItemText (112, Cfg->TextFiles);
  2844.    SetDlgItemText (113, Cfg->UsersHomePath);
  2845.  
  2846.    switch (Cfg->MailStorage) {
  2847.       case ST_SQUISH:
  2848.          CB_SelectItem (107, 0);
  2849.          break;
  2850.       case ST_JAM:
  2851.          CB_SelectItem (107, 1);
  2852.          break;
  2853.       case ST_FIDO:
  2854.          CB_SelectItem (107, 2);
  2855.          break;
  2856.       case ST_ADEPT:
  2857.          CB_SelectItem (107, 3);
  2858.          break;
  2859.    }
  2860.  
  2861.    SetDlgItemText (106, Cfg->MailPath);
  2862.    SetDlgItemText (102, Cfg->MainMenu);
  2863.    BM_SetCheck (120 + Cfg->Ansi, TRUE);
  2864.    BM_SetCheck (118 + Cfg->IEMSI, TRUE);
  2865.    BM_SetCheck (23, Cfg->ExternalEditor);
  2866.    SetDlgItemText (25, Cfg->EditorCmd);
  2867.    SPBM_SetCurrentValue (131, Cfg->MailBoard);
  2868.  
  2869.    return (TRUE);
  2870. }
  2871.  
  2872. VOID CBBSGeneralDlg::OnOK (VOID)
  2873. {
  2874.    GetDlgItemText (104, GetDlgItemTextLength (104), Cfg->UserFile);
  2875.    GetDlgItemText (116, GetDlgItemTextLength (116), Cfg->MenuPath);
  2876.    GetDlgItemText (112, GetDlgItemTextLength (112), Cfg->TextFiles);
  2877.    GetDlgItemText (113, GetDlgItemTextLength (113), Cfg->UsersHomePath);
  2878.  
  2879.    switch (CB_QuerySelection (107)) {
  2880.       case 0:
  2881.          Cfg->MailStorage = ST_SQUISH;
  2882.          break;
  2883.       case 1:
  2884.          Cfg->MailStorage = ST_JAM;
  2885.          break;
  2886.       case 2:
  2887.          Cfg->MailStorage = ST_FIDO;
  2888.          break;
  2889.       case 3:
  2890.          Cfg->MailStorage = ST_ADEPT;
  2891.          break;
  2892.    }
  2893.  
  2894.    GetDlgItemText (106, GetDlgItemTextLength (106), Cfg->MailPath);
  2895.    GetDlgItemText (102, GetDlgItemTextLength (102), Cfg->MainMenu);
  2896.    if (BM_QueryCheck (120) == TRUE)
  2897.       Cfg->Ansi = NO;
  2898.    else if (BM_QueryCheck (121) == TRUE)
  2899.       Cfg->Ansi = YES;
  2900.    else if (BM_QueryCheck (122) == TRUE)
  2901.       Cfg->Ansi = AUTO;
  2902.    if (BM_QueryCheck (118) == TRUE)
  2903.       Cfg->IEMSI = NO;
  2904.    else if (BM_QueryCheck (119) == TRUE)
  2905.       Cfg->IEMSI = YES;
  2906.  
  2907.    Cfg->ExternalEditor = (UCHAR)BM_QueryCheck (23);
  2908.    GetDlgItemText (25, GetDlgItemTextLength (25), Cfg->EditorCmd);
  2909.    Cfg->MailBoard = (USHORT)SPBM_QueryValue (131);
  2910.  
  2911.    EndDialog (TRUE);
  2912. }
  2913. #endif
  2914.  
  2915. // ----------------------------------------------------------------------
  2916. // User editor
  2917. // ----------------------------------------------------------------------
  2918.  
  2919. class CUserListDlg : public CDialog
  2920. {
  2921. public:
  2922.    CUserListDlg (HWND p_hWnd);
  2923.  
  2924.    USHORT Found;
  2925.    CHAR   Search[128];
  2926.    class  TUser *Data;
  2927.  
  2928.    USHORT OnInitDialog (VOID);
  2929.    VOID   OnOK (VOID);
  2930.    VOID   OnUser (VOID);
  2931.  
  2932. private:
  2933.    int i, toSelect;
  2934.    class TUser *User;
  2935.  
  2936.    DECLARE_MESSAGE_MAP ()
  2937. };
  2938.  
  2939. class CUserSecurityDlg : public CDialog
  2940. {
  2941. public:
  2942.    CUserSecurityDlg (HWND p_hWnd);
  2943.  
  2944.    class  TUser *Data;
  2945.  
  2946.    USHORT OnInitDialog (VOID);
  2947.    VOID   OnOK (VOID);
  2948. };
  2949.  
  2950. class CUserAskStringDlg : public CDialog
  2951. {
  2952. public:
  2953.    CUserAskStringDlg (HWND p_hWnd);
  2954.  
  2955.    CHAR   String[128];
  2956.  
  2957.    USHORT OnInitDialog (VOID);
  2958.    VOID   OnOK (VOID);
  2959. };
  2960.  
  2961. class CAddUserDlg : public CDialog
  2962. {
  2963. public:
  2964.    CAddUserDlg (HWND p_hWnd);
  2965.  
  2966.    CHAR   Name[48];
  2967.    CHAR   Password[16];
  2968.  
  2969.    USHORT OnInitDialog (VOID);
  2970.    VOID   OnOK (VOID);
  2971. };
  2972.  
  2973. class CPasswordDlg : public CDialog
  2974. {
  2975. public:
  2976.    CPasswordDlg (HWND p_hWnd);
  2977.  
  2978.    CHAR   Password[16];
  2979.  
  2980.    USHORT OnInitDialog (VOID);
  2981.    VOID   OnOK (VOID);
  2982. };
  2983.  
  2984. class CUserOtherDlg : public CDialog
  2985. {
  2986. public:
  2987.    CUserOtherDlg (HWND p_hWnd);
  2988.  
  2989.    class  TUser *User;
  2990.  
  2991.    USHORT OnInitDialog (VOID);
  2992.    VOID   OnOK (VOID);
  2993. };
  2994.  
  2995. BEGIN_MESSAGE_MAP (CUserDlg, CDialog)
  2996.    ON_COMMAND (113, Security)
  2997.    ON_COMMAND (115, Add)
  2998.    ON_COMMAND (116, Delete)
  2999.    ON_COMMAND (117, List)
  3000.    ON_COMMAND (118, Previous)
  3001.    ON_COMMAND (119, Next)
  3002.    ON_COMMAND (135, Password)
  3003.    ON_COMMAND (136, Search)
  3004.    ON_COMMAND (139, Other)
  3005. END_MESSAGE_MAP ()
  3006.  
  3007. CUserDlg::CUserDlg (HWND p_hWnd) : CDialog ("17", p_hWnd)
  3008. {
  3009.    Data = NULL;
  3010. }
  3011.  
  3012. CUserDlg::~CUserDlg (void)
  3013. {
  3014.    if (Data != NULL)
  3015.       delete Data;
  3016. }
  3017.  
  3018. VOID CUserDlg::OnHelp (VOID)
  3019. {
  3020.    WinHelp ("lora.hlp>h_ref", 17);
  3021. }
  3022.  
  3023. USHORT CUserDlg::OnInitDialog (VOID)
  3024. {
  3025. #if !defined(__POINT__)
  3026.    class TLimits *Limits;
  3027. #endif
  3028.  
  3029.    Center ();
  3030.  
  3031.    Data = new TUser (Cfg->UserFile);
  3032.  
  3033.    EM_SetTextLimit (102, sizeof (Data->Name) - 1);
  3034.    EM_SetTextLimit (104, sizeof (Data->RealName) - 1);
  3035.    EM_SetTextLimit (108, sizeof (Data->Company) - 1);
  3036.    EM_SetTextLimit (106, sizeof (Data->Address) - 1);
  3037.    EM_SetTextLimit (110, sizeof (Data->City) - 1);
  3038.    EM_SetTextLimit (112, sizeof (Data->DayPhone) - 1);
  3039.    EM_SetTextLimit (132, sizeof (Data->MailBox) - 1);
  3040.    EM_SetTextLimit (134, sizeof (Data->Language) - 1);
  3041.    EM_SetTextLimit (124, 1);
  3042.  
  3043. #if !defined(__POINT__)
  3044.    if ((Limits = new TLimits (Cfg->SystemPath)) != NULL) {
  3045.       if (Limits->First () == TRUE)
  3046.          do {
  3047.             CB_AddString (130, Limits->Key);
  3048.          } while (Limits->Next () == TRUE);
  3049.       delete Limits;
  3050.    }
  3051. #endif
  3052.  
  3053.    if (Data->First () == FALSE)
  3054.       Data->Clear ();
  3055.  
  3056.    DisplayData ();
  3057.  
  3058.    return (TRUE);
  3059. }
  3060.  
  3061. VOID CUserDlg::OnOK (VOID)
  3062. {
  3063.    ReadData ();
  3064.    Data->Update ();
  3065. }
  3066.  
  3067. VOID CUserDlg::DisplayData (VOID)
  3068. {
  3069.    CHAR Temp[64];
  3070.  
  3071.    SetDlgItemText (102, Data->Name);
  3072.    SetDlgItemText (104, Data->RealName);
  3073.    SetDlgItemText (108, Data->Company);
  3074.    SetDlgItemText (106, Data->Address);
  3075.    SetDlgItemText (110, Data->City);
  3076.    SetDlgItemText (112, Data->DayPhone);
  3077.    SetDlgItemText (132, Data->MailBox);
  3078.    if (Data->Sex == 0)
  3079.       strcpy (Temp, "M");
  3080.    else
  3081.       strcpy (Temp, "F");
  3082.    SetDlgItemText (124, Temp);
  3083.    sprintf (Temp, "%u", Data->ScreenWidth);
  3084.    SetDlgItemText (126, Temp);
  3085.    sprintf (Temp, "%u", Data->ScreenHeight);
  3086.    SetDlgItemText (128, Temp);
  3087.    sprintf (Temp, "%lu", Data->TotalCalls);
  3088.    SetDlgItemText (138, Temp);
  3089.    BM_SetCheck (114, Data->Ansi);
  3090.    BM_SetCheck (120, Data->Avatar);
  3091.    BM_SetCheck (121, Data->Color);
  3092.    BM_SetCheck (122, Data->HotKey);
  3093.    SetDlgItemText (130, Data->LimitClass);
  3094.    BM_SetCheck (18, Data->ScreenClear);
  3095.    BM_SetCheck (19, Data->IBMChars);
  3096.    BM_SetCheck (21, Data->InUserList);
  3097.    BM_SetCheck (20, Data->MorePrompt);
  3098.    BM_SetCheck (22, Data->FullEd);
  3099.    BM_SetCheck (23, Data->FullReader);
  3100.    BM_SetCheck (24, Data->FullScreen);
  3101.    BM_SetCheck (25, Data->MailCheck);
  3102. }
  3103.  
  3104. VOID CUserDlg::ReadData (VOID)
  3105. {
  3106.    CHAR Temp[64];
  3107.  
  3108.    GetDlgItemText (102, GetDlgItemTextLength (102), Data->Name);
  3109.    GetDlgItemText (104, GetDlgItemTextLength (104), Data->RealName);
  3110.    GetDlgItemText (108, GetDlgItemTextLength (108), Data->Company);
  3111.    GetDlgItemText (106, GetDlgItemTextLength (106), Data->Address);
  3112.    GetDlgItemText (110, GetDlgItemTextLength (110), Data->City);
  3113.    GetDlgItemText (112, GetDlgItemTextLength (112), Data->DayPhone);
  3114.    GetDlgItemText (132, GetDlgItemTextLength (132), Data->MailBox);
  3115.    GetDlgItemText (124, GetDlgItemTextLength (124), Temp);
  3116.    if ((CHAR)toupper (Temp[0]) == 'F')
  3117.       Data->Sex = 1;
  3118.    else
  3119.       Data->Sex = 0;
  3120.    GetDlgItemText (126, GetDlgItemTextLength (126), Temp);
  3121.    Data->ScreenWidth = (USHORT)atoi (Temp);
  3122.    GetDlgItemText (128, GetDlgItemTextLength (128), Temp);
  3123.    Data->ScreenHeight = (USHORT)atoi (Temp);
  3124.    GetDlgItemText (138, GetDlgItemTextLength (138), Temp);
  3125.    Data->TotalCalls = atol (Temp);
  3126.    Data->Ansi = (CHAR)BM_QueryCheck (114);
  3127.    Data->Avatar = (CHAR)BM_QueryCheck (120);
  3128.    Data->Color = (CHAR)BM_QueryCheck (121);
  3129.    Data->HotKey = (CHAR)BM_QueryCheck (122);
  3130.    GetDlgItemText (130, GetDlgItemTextLength (130), Data->LimitClass);
  3131.    Data->ScreenClear = (CHAR)BM_QueryCheck (18);
  3132.    Data->IBMChars = (CHAR)BM_QueryCheck (19);
  3133.    Data->InUserList = (CHAR)BM_QueryCheck (21);
  3134.    Data->MorePrompt = (CHAR)BM_QueryCheck (20);
  3135.    Data->FullEd = (CHAR)BM_QueryCheck (22);
  3136.    Data->FullReader = (CHAR)BM_QueryCheck (23);
  3137.    Data->FullScreen = (CHAR)BM_QueryCheck (24);
  3138.    Data->MailCheck = (CHAR)BM_QueryCheck (25);
  3139. }
  3140.  
  3141. VOID CUserDlg::Add (VOID)
  3142. {
  3143.    class CAddUserDlg *Dlg;
  3144.  
  3145.    if ((Dlg = new CAddUserDlg (m_hWnd)) != NULL) {
  3146.       if (Dlg->DoModal () == TRUE) {
  3147.          Data->Clear ();
  3148.          Data->ScreenWidth = 80;
  3149.          Data->ScreenHeight = 24;
  3150.          strcpy (Data->Name, Dlg->Name);
  3151.          strcpy (Data->RealName, Dlg->Name);
  3152.          Data->SetPassword (Dlg->Password);
  3153.          Data->Level = Cfg->NewUserLevel;
  3154.          Data->AccessFlags = Cfg->NewUserFlags;
  3155.          Data->DenyFlags = Cfg->NewUserDenyFlags;
  3156.          strcpy (Data->LimitClass, Cfg->NewUserLimits);
  3157.          Data->Add ();
  3158.          DisplayData ();
  3159.       }
  3160.       delete Dlg;
  3161.    }
  3162. }
  3163.  
  3164. VOID CUserDlg::Delete (VOID)
  3165. {
  3166.    if (MessageBox ("Are you sure ?", "Delete", MB_YESNO|MB_ICONQUESTION) == IDYES) {
  3167.       Data->Delete ();
  3168.       if (Data->Next () == FALSE) {
  3169.          if (Data->Previous () == FALSE)
  3170.             Data->Clear ();
  3171.       }
  3172.       DisplayData ();
  3173.    }
  3174. }
  3175.  
  3176. VOID CUserDlg::List (VOID)
  3177. {
  3178.    class CUserListDlg *Dlg;
  3179.  
  3180.    if ((Dlg = new CUserListDlg (m_hWnd)) != NULL) {
  3181.       Dlg->Data = Data;
  3182.       if (Dlg->DoModal () == TRUE)
  3183.          DisplayData ();
  3184.       delete Dlg;
  3185.    }
  3186. }
  3187.  
  3188. VOID CUserDlg::Password (VOID)
  3189. {
  3190.    class CPasswordDlg *Dlg;
  3191.  
  3192.    if ((Dlg = new CPasswordDlg (m_hWnd)) != NULL) {
  3193.       if (Dlg->DoModal () == TRUE)
  3194.          Data->SetPassword (Dlg->Password);
  3195.       delete Dlg;
  3196.    }
  3197. }
  3198.  
  3199. VOID CUserDlg::Next (VOID)
  3200. {
  3201.    if (Data->Next () == TRUE)
  3202.       DisplayData ();
  3203. }
  3204.  
  3205. VOID CUserDlg::Previous (VOID)
  3206. {
  3207.    if (Data->Previous () == TRUE)
  3208.       DisplayData ();
  3209. }
  3210.  
  3211. VOID CUserDlg::Security (VOID)
  3212. {
  3213.    class CUserSecurityDlg *Dlg;
  3214.  
  3215.    if ((Dlg = new CUserSecurityDlg (m_hWnd)) != NULL) {
  3216.       Dlg->Data = Data;
  3217.       Dlg->DoModal ();
  3218.       delete Dlg;
  3219.    }
  3220. }
  3221.  
  3222. VOID CUserDlg::Other (VOID)
  3223. {
  3224.    class CUserOtherDlg *Dlg;
  3225.  
  3226.    if ((Dlg = new CUserOtherDlg (m_hWnd)) != NULL) {
  3227.       Dlg->User = Data;
  3228.       Dlg->DoModal ();
  3229.       delete Dlg;
  3230.    }
  3231. }
  3232.  
  3233. VOID CUserDlg::Search (VOID)
  3234. {
  3235.    class CUserListDlg *Dlg;
  3236.    class CUserAskStringDlg *Ask;
  3237.  
  3238.    if ((Ask = new CUserAskStringDlg (m_hWnd)) != NULL) {
  3239.       if (Ask->DoModal () == TRUE) {
  3240.          if ((Dlg = new CUserListDlg (m_hWnd)) != NULL) {
  3241.             strcpy (Dlg->Search, Ask->String);
  3242.             Dlg->Found = FALSE;
  3243.             Dlg->Data = Data;
  3244.             if (Dlg->DoModal () == TRUE)
  3245.                DisplayData ();
  3246.             delete Dlg;
  3247.          }
  3248.       }
  3249.       delete Ask;
  3250.    }
  3251. }
  3252.  
  3253. // ----------------------------------------------------------------------
  3254.  
  3255. BEGIN_MESSAGE_MAP (CUserListDlg, CDialog)
  3256.    ON_CONTROL (CN_ENTER, 101, OnOK)
  3257.    ON_MESSAGE (WM_USER, OnUser)
  3258. END_MESSAGE_MAP ()
  3259.  
  3260. CUserListDlg::CUserListDlg (HWND p_hWnd) : CDialog ("25", p_hWnd)
  3261. {
  3262.    Search[0] = '\0';
  3263.    Found = TRUE;
  3264. }
  3265.  
  3266. USHORT CUserListDlg::OnInitDialog (VOID)
  3267. {
  3268.    SetWindowTitle ("Users List");
  3269.  
  3270.    LVM_AllocateColumns (101, 5);
  3271.    LVM_InsertColumn (101, "Name", LVC_LEFT);
  3272.    LVM_InsertColumn (101, "Level", LVC_RIGHT);
  3273.    LVM_InsertColumn (101, "Limit class", LVC_LEFT);
  3274.    LVM_InsertColumn (101, "City", LVC_LEFT);
  3275.    LVM_InsertColumn (101, "Last call", LVC_LEFT);
  3276.  
  3277.    toSelect = -1;
  3278.    i = 0;
  3279.    strupr (Search);
  3280.  
  3281.    if ((User = new TUser (Cfg->UserFile)) != NULL) {
  3282.       if (User->First () == TRUE) {
  3283. #if defined(__OS2__)
  3284.          WinSetPointer (HWND_DESKTOP, WinQuerySysPointer (HWND_DESKTOP, SPTR_WAIT, FALSE));
  3285.          WinPostMsg (m_hWnd, WM_USER, 0L, 0L);
  3286. #elif defined(__NT__)
  3287.          PostMessage (m_hWnd, WM_USER, 0, 0L);
  3288. #endif
  3289.       }
  3290.    }
  3291.  
  3292.    return (TRUE);
  3293. }
  3294.  
  3295. VOID CUserListDlg::OnUser (VOID)
  3296. {
  3297.    USHORT Found = TRUE;
  3298.    CHAR Temp[128];
  3299.    struct tm *ltm;
  3300.  
  3301.    if (Search[0] != '\0') {
  3302.       strcpy (Temp, User->Name);
  3303.       if (strstr (strupr (Temp), Search) == NULL) {
  3304.          strcpy (Temp, User->RealName);
  3305.          if (strstr (strupr (Temp), Search) == NULL)
  3306.             Found = FALSE;
  3307.       }
  3308.    }
  3309.  
  3310.    if (Found == TRUE || Search[0] == '\0') {
  3311.       LVM_InsertItem (101);
  3312.  
  3313.       LVM_SetItemText (101, 0, User->Name);
  3314.       sprintf (Temp, "%u", User->Level);
  3315.       LVM_SetItemText (101, 1, Temp);
  3316.       LVM_SetItemText (101, 2, User->LimitClass);
  3317.       LVM_SetItemText (101, 3, User->City);
  3318.       ltm = localtime ((time_t *)&User->LastCall);
  3319.       sprintf (Temp, "%02d/%02d/%04d %02d:%02d", ltm->tm_mday, ltm->tm_mon + 1, ltm->tm_year + 1900, ltm->tm_hour, ltm->tm_min);
  3320.       LVM_SetItemText (101, 4, Temp);
  3321.  
  3322.       if (!strcmp (User->Name, Data->Name))
  3323.          toSelect = i;
  3324.       i++;
  3325.    }
  3326.  
  3327.    if (User->Next () == FALSE) {
  3328.       delete User;
  3329.       LVM_InvalidateView (101);
  3330.       if (toSelect != -1)
  3331.          LVM_SelectItem (101, toSelect);
  3332.  
  3333. #if defined(__OS2__)
  3334.       WinSetPointer (HWND_DESKTOP, WinQuerySysPointer (HWND_DESKTOP, SPTR_ARROW, FALSE));
  3335. #elif defined(__NT__)
  3336. #endif
  3337.    }
  3338.    else
  3339. #if defined(__OS2__)
  3340.       WinPostMsg (m_hWnd, WM_USER, 0L, 0L);
  3341. #elif defined(__NT__)
  3342.       PostMessage (m_hWnd, WM_USER, 0, 0L);
  3343. #endif
  3344. }
  3345.  
  3346. VOID CUserListDlg::OnOK (VOID)
  3347. {
  3348.    int item;
  3349.    CHAR Temp[64];
  3350.  
  3351.    if ((item = LVM_QuerySelectedItem (101)) != -1) {
  3352.       LVM_QueryItemText (101, item, 0, Temp);
  3353.       Data->GetData (Temp);
  3354.    }
  3355.  
  3356.    EndDialog (TRUE);
  3357. }
  3358.  
  3359. // ----------------------------------------------------------------------
  3360.  
  3361. CUserSecurityDlg::CUserSecurityDlg (HWND p_hWnd) : CDialog ("18", p_hWnd)
  3362. {
  3363. }
  3364.  
  3365. USHORT CUserSecurityDlg::OnInitDialog (VOID)
  3366. {
  3367.    USHORT i;
  3368.    ULONG Test;
  3369.  
  3370.    Center ();
  3371.    SetWindowTitle ("User Security");
  3372.  
  3373.    SPBM_SetLimits (102, 65535U, 0L);
  3374.    SPBM_SetCurrentValue (102, Data->Level);
  3375.  
  3376.    for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  3377.       if (Data->AccessFlags & Test)
  3378.          BM_SetCheck (i, TRUE);
  3379.    }
  3380.    for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  3381.       if (Data->DenyFlags & Test)
  3382.          BM_SetCheck (i, TRUE);
  3383.    }
  3384.  
  3385.    return (TRUE);
  3386. }
  3387.  
  3388. VOID CUserSecurityDlg::OnOK (VOID)
  3389. {
  3390.    USHORT i;
  3391.    ULONG Test;
  3392.  
  3393.    Data->Level = (USHORT)SPBM_QueryValue (102);
  3394.  
  3395.    Data->AccessFlags = 0L;
  3396.    for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  3397.       if (BM_QueryCheck (i) == TRUE)
  3398.          Data->AccessFlags |= Test;
  3399.    }
  3400.    Data->DenyFlags = 0L;
  3401.    for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  3402.       if (BM_QueryCheck (i) == TRUE)
  3403.          Data->DenyFlags |= Test;
  3404.    }
  3405.  
  3406.    EndDialog (TRUE);
  3407. }
  3408.  
  3409. // ----------------------------------------------------------------------
  3410.  
  3411. CUserOtherDlg::CUserOtherDlg (HWND p_hWnd) : CDialog ("38", p_hWnd)
  3412. {
  3413. }
  3414.  
  3415. USHORT CUserOtherDlg::OnInitDialog (VOID)
  3416. {
  3417.    Center ();
  3418.  
  3419.    SetDlgItemText (102, User->InetAddress);
  3420.    BM_SetCheck (103, User->ImportPOP3Mail);
  3421.    BM_SetCheck (104, User->UseInetAddress);
  3422.    SetDlgItemText (106, User->Pop3Pwd);
  3423.  
  3424.    return (TRUE);
  3425. }
  3426.  
  3427. VOID CUserOtherDlg::OnOK (VOID)
  3428. {
  3429.    GetDlgItemText (102, GetDlgItemTextLength (102), User->InetAddress);
  3430.    User->ImportPOP3Mail = (UCHAR)BM_QueryCheck (103);
  3431.    User->UseInetAddress = (UCHAR)BM_QueryCheck (104);
  3432.    GetDlgItemText (106, GetDlgItemTextLength (106), User->Pop3Pwd);
  3433.  
  3434.    EndDialog (TRUE);
  3435. }
  3436.  
  3437. // ----------------------------------------------------------------------
  3438.  
  3439. CUserAskStringDlg::CUserAskStringDlg (HWND p_hWnd) : CDialog ("26", p_hWnd)
  3440. {
  3441. }
  3442.  
  3443. USHORT CUserAskStringDlg::OnInitDialog (VOID)
  3444. {
  3445.    Center ();
  3446.  
  3447.    SetWindowTitle ("Search User List");
  3448.    EM_SetTextLimit (128, sizeof (String) - 1);
  3449.  
  3450.    return (TRUE);
  3451. }
  3452.  
  3453. VOID CUserAskStringDlg::OnOK (VOID)
  3454. {
  3455.    GetDlgItemText (128, GetDlgItemTextLength (128), String);
  3456.    EndDialog (TRUE);
  3457. }
  3458.  
  3459. // ----------------------------------------------------------------------
  3460.  
  3461. CAddUserDlg::CAddUserDlg (HWND p_hWnd) : CDialog ("34", p_hWnd)
  3462. {
  3463. }
  3464.  
  3465. USHORT CAddUserDlg::OnInitDialog (VOID)
  3466. {
  3467.    Center ();
  3468.  
  3469.    EM_SetTextLimit (102, sizeof (Name) - 1);
  3470.    EM_SetTextLimit (104, sizeof (Password) - 1);
  3471.  
  3472.    return (TRUE);
  3473. }
  3474.  
  3475. VOID CAddUserDlg::OnOK (VOID)
  3476. {
  3477.    GetDlgItemText (102, GetDlgItemTextLength (102), Name);
  3478.    GetDlgItemText (104, GetDlgItemTextLength (104), Password);
  3479.  
  3480.    EndDialog (TRUE);
  3481. }
  3482.  
  3483. // ----------------------------------------------------------------------
  3484.  
  3485. CPasswordDlg::CPasswordDlg (HWND p_hWnd) : CDialog ("36", p_hWnd)
  3486. {
  3487. }
  3488.  
  3489. USHORT CPasswordDlg::OnInitDialog (VOID)
  3490. {
  3491.    Center ();
  3492.  
  3493.    EM_SetTextLimit (102, sizeof (Password) - 1);
  3494.  
  3495.    return (TRUE);
  3496. }
  3497.  
  3498. VOID CPasswordDlg::OnOK (VOID)
  3499. {
  3500.    GetDlgItemText (102, GetDlgItemTextLength (102), Password);
  3501.  
  3502.    EndDialog (TRUE);
  3503. }
  3504.  
  3505. #if !defined(__POINT__)
  3506. // ----------------------------------------------------------------------
  3507. // Offline Reader
  3508. // ----------------------------------------------------------------------
  3509.  
  3510. COfflineDlg::COfflineDlg (HWND p_hWnd) : CDialog ("42", p_hWnd)
  3511. {
  3512. }
  3513.  
  3514. VOID COfflineDlg::OnHelp (VOID)
  3515. {
  3516.    WinHelp ("lora.hlp>h_ref", 42);
  3517. }
  3518.  
  3519. USHORT COfflineDlg::OnInitDialog (VOID)
  3520. {
  3521.    Center ();
  3522.  
  3523.    EM_SetTextLimit (102, sizeof (Cfg->TempPath) - 1);
  3524.    EM_SetTextLimit (104, sizeof (Cfg->OLRPacketName) - 1);
  3525.    SPBM_SetLimits (106, 65535U, 0L);
  3526.  
  3527.    SetDlgItemText (102, Cfg->TempPath);
  3528.    SetDlgItemText (104, Cfg->OLRPacketName);
  3529.    SPBM_SetCurrentValue (106, Cfg->OLRMaxMessages);
  3530.  
  3531.    return (TRUE);
  3532. }
  3533.  
  3534. VOID COfflineDlg::OnOK (VOID)
  3535. {
  3536.    GetDlgItemText (102, GetDlgItemTextLength (102), Cfg->TempPath);
  3537.    GetDlgItemText (104, GetDlgItemTextLength (104), Cfg->OLRPacketName);
  3538.    Cfg->OLRMaxMessages = (USHORT)SPBM_QueryValue (106);
  3539.  
  3540.    EndDialog (TRUE);
  3541. }
  3542.  
  3543. #endif
  3544.  
  3545. // ----------------------------------------------------------------------
  3546. // External Protocols configuration
  3547. // ----------------------------------------------------------------------
  3548.  
  3549. class CProtocolListDlg : public CDialog
  3550. {
  3551. public:
  3552.    CProtocolListDlg (HWND p_hWnd);
  3553.  
  3554.    class  TProtocol *Data;
  3555.  
  3556.    USHORT OnInitDialog (VOID);
  3557.    VOID   OnOK (VOID);
  3558.  
  3559. private:
  3560.    DECLARE_MESSAGE_MAP ()
  3561. };
  3562.  
  3563. class CAddProtocolDlg : public CDialog
  3564. {
  3565. public:
  3566.    CAddProtocolDlg (HWND p_hWnd);
  3567.  
  3568.    CHAR   Key[16];
  3569.    CHAR   Description[64];
  3570.  
  3571.    USHORT OnInitDialog (VOID);
  3572.    VOID   OnOK (VOID);
  3573. };
  3574.  
  3575. BEGIN_MESSAGE_MAP (CProtocolDlg, CDialog)
  3576.    ON_COMMAND (115, OnAdd)
  3577.    ON_COMMAND (117, List)
  3578.    ON_COMMAND (118, OnPrevious)
  3579.    ON_COMMAND (119, OnNext)
  3580.    ON_COMMAND (116, OnDelete)
  3581. END_MESSAGE_MAP()
  3582.  
  3583. CProtocolDlg::CProtocolDlg (HWND p_hWnd) : CDialog ("44", p_hWnd)
  3584. {
  3585.    Data = NULL;
  3586. }
  3587.  
  3588. CProtocolDlg::~CProtocolDlg (void)
  3589. {
  3590.    if (Data != NULL)
  3591.       delete Data;
  3592. }
  3593.  
  3594. VOID CProtocolDlg::OnHelp (VOID)
  3595. {
  3596.    WinHelp ("lora.hlp>h_ref", 44);
  3597. }
  3598.  
  3599. USHORT CProtocolDlg::OnInitDialog (VOID)
  3600. {
  3601.    Center ();
  3602.    Data = new TProtocol (Cfg->SystemPath);
  3603.  
  3604.    EM_SetTextLimit (102, sizeof (Data->Key) - 1);
  3605.    EM_SetTextLimit (104, sizeof (Data->Description) - 1);
  3606.    EM_SetTextLimit (108, sizeof (Data->DownloadCmd) - 1);
  3607.    EM_SetTextLimit (106, sizeof (Data->UploadCmd) - 1);
  3608.    EM_SetTextLimit (112, sizeof (Data->LogFileName) - 1);
  3609.    EM_SetTextLimit (114, sizeof (Data->CtlFileName) - 1);
  3610.    EM_SetTextLimit (124, sizeof (Data->DownloadCtlString) - 1);
  3611.    EM_SetTextLimit (126, sizeof (Data->UploadCtlString) - 1);
  3612.    EM_SetTextLimit (128, sizeof (Data->DownloadKeyword) - 1);
  3613.    EM_SetTextLimit (130, sizeof (Data->UploadKeyword) - 1);
  3614.  
  3615.    SPBM_SetLimits (132, 100, 0);
  3616.    SPBM_SetLimits (134, 100, 0);
  3617.    SPBM_SetLimits (136, 100, 0);
  3618.  
  3619.    if (Data->First () == FALSE)
  3620.       Data->New ();
  3621.  
  3622.    DisplayData ();
  3623.  
  3624.    return (TRUE);
  3625. }
  3626.  
  3627. VOID CProtocolDlg::DisplayData (VOID)
  3628. {
  3629.    BM_SetCheck (110, Data->Active);
  3630.    SetDlgItemText (102, Data->Key);
  3631.    SetDlgItemText (104, Data->Description);
  3632.    SetDlgItemText (108, Data->DownloadCmd);
  3633.    SetDlgItemText (106, Data->UploadCmd);
  3634.    SetDlgItemText (112, Data->LogFileName);
  3635.    SetDlgItemText (114, Data->CtlFileName);
  3636.    SetDlgItemText (124, Data->DownloadCtlString);
  3637.    SetDlgItemText (126, Data->UploadCtlString);
  3638.    SetDlgItemText (128, Data->DownloadKeyword);
  3639.    SetDlgItemText (130, Data->UploadKeyword);
  3640.    SPBM_SetCurrentValue (132, Data->FileNamePos);
  3641.    SPBM_SetCurrentValue (134, Data->SizePos);
  3642.    SPBM_SetCurrentValue (136, Data->CpsPos);
  3643.    BM_SetCheck (137, Data->Batch);
  3644.    BM_SetCheck (138, Data->DisablePort);
  3645.    BM_SetCheck (139, Data->ChangeToUploadPath);
  3646. }
  3647.  
  3648. VOID CProtocolDlg::ReadData (VOID)
  3649. {
  3650.    Data->Active = (CHAR)BM_QueryCheck (110);
  3651.    GetDlgItemText (102, GetDlgItemTextLength (102), Data->Key);
  3652.    GetDlgItemText (104, GetDlgItemTextLength (104), Data->Description);
  3653.    GetDlgItemText (108, GetDlgItemTextLength (108), Data->DownloadCmd);
  3654.    GetDlgItemText (106, GetDlgItemTextLength (106), Data->UploadCmd);
  3655.    GetDlgItemText (112, GetDlgItemTextLength (112), Data->LogFileName);
  3656.    GetDlgItemText (114, GetDlgItemTextLength (114), Data->CtlFileName);
  3657.    GetDlgItemText (124, GetDlgItemTextLength (124), Data->DownloadCtlString);
  3658.    GetDlgItemText (126, GetDlgItemTextLength (126), Data->UploadCtlString);
  3659.    GetDlgItemText (128, GetDlgItemTextLength (128), Data->DownloadKeyword);
  3660.    GetDlgItemText (130, GetDlgItemTextLength (130), Data->UploadKeyword);
  3661.    Data->FileNamePos = (USHORT)SPBM_QueryValue (132);
  3662.    Data->SizePos = (USHORT)SPBM_QueryValue (134);
  3663.    Data->CpsPos = (USHORT)SPBM_QueryValue (136);
  3664.    Data->Batch = (CHAR)BM_QueryCheck (137);
  3665.    Data->DisablePort = (CHAR)BM_QueryCheck (138);
  3666.    Data->ChangeToUploadPath = (CHAR)BM_QueryCheck (139);
  3667. }
  3668.  
  3669. VOID CProtocolDlg::OnAdd (VOID)
  3670. {
  3671.    class CAddProtocolDlg *Dlg;
  3672.  
  3673.    if ((Dlg = new CAddProtocolDlg (m_hWnd)) != NULL) {
  3674.       if (Dlg->DoModal () == TRUE) {
  3675.          Data->New ();
  3676.          strcpy (Data->Key, Dlg->Key);
  3677.          strcpy (Data->Description, Dlg->Description);
  3678.          Data->Add ();
  3679.          DisplayData ();
  3680.       }
  3681.       delete Dlg;
  3682.    }
  3683.    SetFocus (102);
  3684. }
  3685.  
  3686. VOID CProtocolDlg::OnDelete (VOID)
  3687. {
  3688.    if (MessageBox ("Are you sure ?", "Delete", MB_YESNO|MB_ICONQUESTION) == IDYES) {
  3689.       Data->Delete ();
  3690.       SetFocus (102);
  3691.       DisplayData ();
  3692.    }
  3693. }
  3694.  
  3695. VOID CProtocolDlg::OnPrevious (VOID)
  3696. {
  3697.    if (Data->Previous () == TRUE)
  3698.       DisplayData ();
  3699. }
  3700.  
  3701. VOID CProtocolDlg::OnNext (VOID)
  3702. {
  3703.    if (Data->Next () == TRUE)
  3704.       DisplayData ();
  3705. }
  3706.  
  3707. VOID CProtocolDlg::OnOK (VOID)
  3708. {
  3709.    ReadData ();
  3710.    Data->Update ();
  3711. }
  3712.  
  3713. VOID CProtocolDlg::List (VOID)
  3714. {
  3715.    class CProtocolListDlg *Dlg;
  3716.  
  3717.    if ((Dlg = new CProtocolListDlg (m_hWnd)) != NULL) {
  3718.       Dlg->Data = Data;
  3719.       if (Dlg->DoModal () == TRUE)
  3720.          DisplayData ();
  3721.       delete Dlg;
  3722.    }
  3723. }
  3724.  
  3725. // ----------------------------------------------------------------------
  3726.  
  3727. BEGIN_MESSAGE_MAP (CProtocolListDlg, CDialog)
  3728.    ON_CONTROL (CN_ENTER, 101, OnOK)
  3729. END_MESSAGE_MAP ()
  3730.  
  3731. CProtocolListDlg::CProtocolListDlg (HWND p_hWnd) : CDialog ("25", p_hWnd)
  3732. {
  3733. }
  3734.  
  3735. USHORT CProtocolListDlg::OnInitDialog (VOID)
  3736. {
  3737.    CHAR Temp[16];
  3738.    class TProtocol *Protocol;
  3739.  
  3740.    SetWindowTitle ("Protocol List");
  3741.  
  3742.    LVM_AllocateColumns (101, 4);
  3743.    LVM_InsertColumn (101, "Key", LVC_LEFT);
  3744.    LVM_InsertColumn (101, "Active", LVC_CENTER);
  3745.    LVM_InsertColumn (101, "Batch", LVC_CENTER);
  3746.    LVM_InsertColumn (101, "Description", LVC_LEFT);
  3747.  
  3748.    if ((Protocol = new TProtocol (Cfg->SystemPath)) != NULL) {
  3749.       if (Protocol->First () == TRUE)
  3750.          do {
  3751.             LVM_InsertItem (101);
  3752.  
  3753.             LVM_SetItemText (101, 0, Protocol->Key);
  3754.             sprintf (Temp, "%s", (Protocol->Active == TRUE) ? "Yes" : "No");
  3755.             LVM_SetItemText (101, 1, Temp);
  3756.             sprintf (Temp, "%s", (Protocol->Batch == TRUE) ? "Yes" : "No");
  3757.             LVM_SetItemText (101, 2, Temp);
  3758.             LVM_SetItemText (101, 3, Protocol->Description);
  3759.          } while (Protocol->Next () == TRUE);
  3760.       delete Protocol;
  3761.    }
  3762.  
  3763.    LVM_InvalidateView (101);
  3764.  
  3765.    return (TRUE);
  3766. }
  3767.  
  3768. VOID CProtocolListDlg::OnOK (VOID)
  3769. {
  3770.    int item;
  3771.    CHAR Temp[32];
  3772.  
  3773.    if ((item = LVM_QuerySelectedItem (101)) != -1) {
  3774.       LVM_QueryItemText (101, item, 0, Temp);
  3775.       Data->Read (Temp);
  3776.    }
  3777.  
  3778.    EndDialog (TRUE);
  3779. }
  3780.  
  3781. // ----------------------------------------------------------------------
  3782.  
  3783. CAddProtocolDlg::CAddProtocolDlg (HWND p_hWnd) : CDialog ("45", p_hWnd)
  3784. {
  3785. }
  3786.  
  3787. USHORT CAddProtocolDlg::OnInitDialog (VOID)
  3788. {
  3789.    Center ();
  3790.  
  3791.    EM_SetTextLimit (102, sizeof (Key) - 1);
  3792.    EM_SetTextLimit (104, sizeof (Description) - 1);
  3793.  
  3794.    return (TRUE);
  3795. }
  3796.  
  3797. VOID CAddProtocolDlg::OnOK (VOID)
  3798. {
  3799.    GetDlgItemText (102, GetDlgItemTextLength (102), Key);
  3800.    GetDlgItemText (104, GetDlgItemTextLength (104), Description);
  3801.  
  3802.    EndDialog (TRUE);
  3803. }
  3804.  
  3805.