home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / lora299s.zip / OLD.CPP < prev    next >
Text File  |  1996-08-08  |  38KB  |  859 lines

  1.  
  2. #if defined(__OS2__)
  3. MRESULT EXPENTRY MessageDlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  4. #elif defined(__NT__)
  5. BOOL CALLBACK MessageDlgProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  6. #endif
  7. {
  8.    static USHORT status = 0;
  9.    static class TMsgData *Data = NULL;
  10.  
  11.    switch (msg) {
  12. #if defined(__OS2__)
  13.       case WM_INITDLG: {
  14.          USHORT i;
  15.          ULONG Test, nFields;
  16.          HWND hwndContainer;
  17.          CNRINFO cnrInfo;
  18.          PFIELDINFO pFieldInfo, pTopField;
  19.          AREALISTDATA *pRecord;
  20.          FIELDINFOINSERT fieldinsert;
  21.          RECTL rc;
  22.          class TEchoLink *Link;
  23.  
  24.          if (status == 0) {
  25.             WinQueryWindowRect (hwnd, &rc);
  26.             rc.yTop = (WinQuerySysValue (HWND_DESKTOP, SV_CYSCREEN) - (rc.yTop - rc.yBottom)) / 2;
  27.             rc.xLeft = (WinQuerySysValue (HWND_DESKTOP, SV_CXSCREEN) - (rc.xRight - rc.xLeft)) / 2;
  28.             WinSetWindowPos (hwnd, NULL, rc.xLeft, rc.yTop, 0, 0, SWP_MOVE);
  29.  
  30.             Data = new TMsgData (Cfg->SystemPath);
  31.             WinSendDlgItemMsg (hwnd, 102, EM_SETTEXTLIMIT, MPFROMSHORT (sizeof (Data->Key) - 1), 0L);
  32.             WinSendDlgItemMsg (hwnd, 104, EM_SETTEXTLIMIT, MPFROMSHORT (sizeof (Data->Display) - 1), 0L);
  33.             WinSendDlgItemMsg (hwnd, 106, EM_SETTEXTLIMIT, MPFROMSHORT (sizeof (Data->Path) - 1), 0L);
  34.             WinSendDlgItemMsg (hwnd, 126, EM_SETTEXTLIMIT, MPFROMSHORT (sizeof (Data->EchoTag) - 1), 0L);
  35.             WinSendDlgItemMsg (hwnd, 128, EM_SETTEXTLIMIT, MPFROMSHORT (sizeof (Data->NewsGroup) - 1), 0L);
  36.  
  37.             WinSendDlgItemMsg (hwnd, 107, LM_INSERTITEM, MPFROMSHORT (LIT_END), MPFROMP ("Squish<tm>"));
  38.             WinSendDlgItemMsg (hwnd, 107, LM_INSERTITEM, MPFROMSHORT (LIT_END), MPFROMP ("JAM"));
  39.             WinSendDlgItemMsg (hwnd, 107, LM_INSERTITEM, MPFROMSHORT (LIT_END), MPFROMP ("Fido (*.msg)"));
  40.             WinSendDlgItemMsg (hwnd, 107, LM_INSERTITEM, MPFROMSHORT (LIT_END), MPFROMP ("AdeptXBBS"));
  41.             WinSendDlgItemMsg (hwnd, 107, LM_INSERTITEM, MPFROMSHORT (LIT_END), MPFROMP ("USENET Newsgroup"));
  42.  
  43.             WinSendDlgItemMsg (hwnd, 138, SPBM_SETLIMITS, MPFROMSHORT (5000U), MPFROMSHORT (0L));
  44.             WinSendDlgItemMsg (hwnd, 136, SPBM_SETLIMITS, MPFROMSHORT (366U), MPFROMSHORT (0L));
  45.  
  46.             if (Data->First () == FALSE)
  47.                Data->New ();
  48.             WinPostMsg (hwnd, WM_USER, 0L, 0L);
  49.          }
  50.          else if (status == 1) {
  51.             WinSetDlgItemText (hwnd, 128, "");
  52.             if ((Link = new TEchoLink (Cfg->SystemPath)) != NULL) {
  53.                Link->Load (Data->EchoTag);
  54.                if (Link->First () == TRUE)
  55.                   do {
  56.                      WinSendDlgItemMsg (hwnd, 101, LM_INSERTITEM, MPFROMSHORT (LIT_END), MPFROMP (Link->Address));
  57.                   } while (Link->Next () == TRUE);
  58.                delete Link;
  59.             }
  60.          }
  61.          else if (status == 2) {
  62.             WinSendDlgItemMsg (hwnd, 102, SPBM_SETLIMITS, MPFROMSHORT (65535U), MPFROMSHORT (0L));
  63.             WinSendDlgItemMsg (hwnd, 102, SPBM_SETCURRENTVALUE, MPFROMSHORT (Data->Level), 0L);
  64.  
  65.             for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  66.                if (Data->AccessFlags & Test)
  67.                   WinSendDlgItemMsg (hwnd, i, BM_SETCHECK, MPFROMSHORT (TRUE), 0L);
  68.             }
  69.             for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  70.                if (Data->DenyFlags & Test)
  71.                   WinSendDlgItemMsg (hwnd, i, BM_SETCHECK, MPFROMSHORT (TRUE), 0L);
  72.             }
  73.  
  74.             WinSendDlgItemMsg (hwnd, 173, SPBM_SETLIMITS, MPFROMSHORT (65535U), MPFROMSHORT (0L));
  75.             WinSendDlgItemMsg (hwnd, 173, SPBM_SETCURRENTVALUE, MPFROMSHORT (Data->WriteLevel), 0L);
  76.  
  77.             for (i = 174, Test = 0x80000000L; i <= 205; i++, Test >>= 1) {
  78.                if (Data->WriteFlags & Test)
  79.                   WinSendDlgItemMsg (hwnd, i, BM_SETCHECK, MPFROMSHORT (TRUE), 0L);
  80.             }
  81.             for (i = 207, Test = 0x80000000L; i <= 238; i++, Test >>= 1) {
  82.                if (Data->DenyWriteFlags & Test)
  83.                   WinSendDlgItemMsg (hwnd, i, BM_SETCHECK, MPFROMSHORT (TRUE), 0L);
  84.             }
  85.          }
  86.          else if (status == 3) {
  87.             WinSetWindowText (hwnd, "Message Areas List");
  88.             if ((hwndContainer = WinWindowFromID (hwnd, 101)) != NULLHANDLE) {
  89.                memset (&cnrInfo, 0, sizeof (CNRINFO));
  90.                cnrInfo.cb = sizeof (CNRINFO);
  91.                cnrInfo.flWindowAttr = CV_DETAIL|CA_DETAILSVIEWTITLES;
  92.                WinSendMsg (hwndContainer, CM_SETCNRINFO, MPFROMP (&cnrInfo), MPFROMLONG (CMA_FLWINDOWATTR));
  93.  
  94.                nFields = 4;
  95.                pFieldInfo = (PFIELDINFO)WinSendMsg (hwndContainer, CM_ALLOCDETAILFIELDINFO, (MPARAM)nFields, (MPARAM)0);
  96.                pTopField = pFieldInfo;
  97.  
  98.                pFieldInfo->cb = sizeof (FIELDINFO);
  99.                pFieldInfo->pTitleData = "Key";
  100.                pFieldInfo->flData = CFA_STRING|CFA_VCENTER|CFA_LEFT|CFA_SEPARATOR|CFA_HORZSEPARATOR;
  101.                pFieldInfo->flTitle = CFA_FITITLEREADONLY|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR;
  102.                pFieldInfo->offStruct = (ULONG)&pRecord->pszKey - (ULONG)pRecord;
  103.                pFieldInfo->pUserData = NULL;
  104.                pFieldInfo->cxWidth = 0L;
  105.  
  106.                pFieldInfo = pFieldInfo->pNextFieldInfo;
  107.                pFieldInfo->cb = sizeof (FIELDINFO);
  108.                pFieldInfo->pTitleData = "Level";
  109.                pFieldInfo->flData = CFA_STRING|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR|CFA_HORZSEPARATOR;
  110.                pFieldInfo->flTitle = CFA_FITITLEREADONLY|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR;
  111.                pFieldInfo->offStruct = (ULONG)&pRecord->pszNumber - (ULONG)pRecord;
  112.                pFieldInfo->pUserData = NULL;
  113.                pFieldInfo->cxWidth = 0L;
  114.  
  115.                pFieldInfo = pFieldInfo->pNextFieldInfo;
  116.                pFieldInfo->cb = sizeof (FIELDINFO);
  117.                pFieldInfo->pTitleData = "Write";
  118.                pFieldInfo->flData = CFA_STRING|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR|CFA_HORZSEPARATOR;
  119.                pFieldInfo->flTitle = CFA_FITITLEREADONLY|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR;
  120.                pFieldInfo->offStruct = (ULONG)&pRecord->pszWrite - (ULONG)pRecord;
  121.                pFieldInfo->pUserData = NULL;
  122.                pFieldInfo->cxWidth = 0L;
  123.  
  124.                pFieldInfo = pFieldInfo->pNextFieldInfo;
  125.                pFieldInfo->cb = sizeof (FIELDINFO);
  126.                pFieldInfo->pTitleData = "Description";
  127.                pFieldInfo->flData = CFA_STRING|CFA_VCENTER|CFA_LEFT|CFA_SEPARATOR|CFA_HORZSEPARATOR;
  128.                pFieldInfo->flTitle = CFA_FITITLEREADONLY|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR;
  129.                pFieldInfo->offStruct = (ULONG)&pRecord->pszDescription - (ULONG)pRecord;
  130.                pFieldInfo->pUserData = NULL;
  131.                pFieldInfo->cxWidth = 0L;
  132.  
  133.                fieldinsert.cb = sizeof (FIELDINFOINSERT);
  134.                fieldinsert.pFieldInfoOrder = (PFIELDINFO)CMA_FIRST;
  135.                fieldinsert.fInvalidateFieldInfo = TRUE;
  136.                fieldinsert.cFieldInfoInsert = nFields;
  137.                WinSendMsg (hwndContainer, CM_INSERTDETAILFIELDINFO, MPFROMP (pTopField), MPFROMP (&fieldinsert));
  138.             }
  139.             WinPostMsg (hwnd, WM_USER + 2, 0L, 0L);
  140.          }
  141.          break;
  142.       }
  143. #elif defined(__NT__)
  144.       case WM_INITDIALOG:
  145.          return ((BOOL)TRUE);
  146.  
  147.       case WM_CTLCOLORBTN:
  148.       case WM_CTLCOLORSTATIC:
  149.       case WM_CTLCOLORDLG: {
  150.          LOGBRUSH logBrush;
  151.  
  152.          SetBkColor ((HDC)wParam, GetSysColor (COLOR_MENU));
  153.  
  154.          logBrush.lbStyle = BS_SOLID;
  155.          logBrush.lbColor = GetSysColor (COLOR_MENU);
  156.          logBrush.lbHatch = 0;
  157.  
  158.          return ((BOOL)CreateBrushIndirect (&logBrush));
  159.       }
  160. #endif
  161.  
  162.       case WM_USER:
  163.          if (Data != NULL) {
  164. #if defined(__OS2__)
  165.             WinSetDlgItemText (hwnd, 102, Data->Key);
  166.             WinSetDlgItemText (hwnd, 104, Data->Display);
  167.             WinSetDlgItemText (hwnd, 106, Data->Path);
  168.             switch (Data->Storage) {
  169.                case ST_SQUISH:
  170.                   WinSendDlgItemMsg (hwnd, 107, LM_SELECTITEM, MPFROMSHORT (0), MPFROMSHORT (TRUE));
  171.                   break;
  172.                case ST_JAM:
  173.                   WinSendDlgItemMsg (hwnd, 107, LM_SELECTITEM, MPFROMSHORT (1), MPFROMSHORT (TRUE));
  174.                   break;
  175.                case ST_FIDO:
  176.                   WinSendDlgItemMsg (hwnd, 107, LM_SELECTITEM, MPFROMSHORT (2), MPFROMSHORT (TRUE));
  177.                   break;
  178.                case ST_ADEPT:
  179.                   WinSendDlgItemMsg (hwnd, 107, LM_SELECTITEM, MPFROMSHORT (3), MPFROMSHORT (TRUE));
  180.                   break;
  181.                case ST_USENET:
  182.                   WinSendDlgItemMsg (hwnd, 107, LM_SELECTITEM, MPFROMSHORT (4), MPFROMSHORT (TRUE));
  183.                   break;
  184.             }
  185.             WinSendDlgItemMsg (hwnd, 113, BM_SETCHECK, MPFROMSHORT (Data->ShowGlobal), 0L);
  186.             WinSendDlgItemMsg (hwnd, 114, BM_SETCHECK, MPFROMSHORT (Data->Offline), 0L);
  187.             WinSendDlgItemMsg (hwnd, 129, BM_SETCHECK, MPFROMSHORT (Data->EchoMail), 0L);
  188.             WinSendDlgItemMsg (hwnd, 130, BM_SETCHECK, MPFROMSHORT (Data->UpdateNews), 0L);
  189.             WinSetDlgItemText (hwnd, 126, Data->EchoTag);
  190.             WinSetDlgItemText (hwnd, 128, Data->NewsGroup);
  191.             WinSendDlgItemMsg (hwnd, 138, SPBM_SETCURRENTVALUE, MPFROMSHORT (Data->MaxMessages), 0L);
  192.             WinSendDlgItemMsg (hwnd, 136, SPBM_SETCURRENTVALUE, MPFROMSHORT (Data->DaysOld), 0L);
  193. #elif defined(__NT__)
  194. #endif
  195.          }
  196.          break;
  197.  
  198.       case WM_USER + 1:
  199.          if (Data != NULL) {
  200. #if defined(__OS2__)
  201.             ULONG Value;
  202.  
  203.             WinQueryDlgItemText (hwnd, 102, WinQueryDlgItemTextLength (hwnd, 102) + 1, Data->Key);
  204.             WinQueryDlgItemText (hwnd, 104, WinQueryDlgItemTextLength (hwnd, 104) + 1, Data->Display);
  205.             WinQueryDlgItemText (hwnd, 106, WinQueryDlgItemTextLength (hwnd, 106) + 1, Data->Path);
  206.             switch ((USHORT)WinSendDlgItemMsg (hwnd, 107, LM_QUERYSELECTION, MPFROMSHORT (LIT_FIRST), 0L)) {
  207.                case 0:
  208.                   Data->Storage = ST_SQUISH;
  209.                   break;
  210.                case 1:
  211.                   Data->Storage = ST_JAM;
  212.                   break;
  213.                case 2:
  214.                   Data->Storage = ST_FIDO;
  215.                   break;
  216.                case 3:
  217.                   Data->Storage = ST_ADEPT;
  218.                   break;
  219.                case 4:
  220.                   Data->Storage = ST_USENET;
  221.                   break;
  222.             }
  223.             Data->ShowGlobal = (CHAR)WinSendDlgItemMsg (hwnd, 113, BM_QUERYCHECK, 0L, 0L);
  224.             Data->Offline = (CHAR)WinSendDlgItemMsg (hwnd, 114, BM_QUERYCHECK, 0L, 0L);
  225.             Data->EchoMail = (CHAR)WinSendDlgItemMsg (hwnd, 129, BM_QUERYCHECK, 0L, 0L);
  226.             Data->UpdateNews = (CHAR)WinSendDlgItemMsg (hwnd, 130, BM_QUERYCHECK, 0L, 0L);
  227.             WinQueryDlgItemText (hwnd, 126, WinQueryDlgItemTextLength (hwnd, 126) + 1, Data->EchoTag);
  228.             WinQueryDlgItemText (hwnd, 128, WinQueryDlgItemTextLength (hwnd, 128) + 1, Data->NewsGroup);
  229.             WinSendDlgItemMsg (hwnd, 138, SPBM_QUERYVALUE, MPFROMP (&Value), MPFROM2SHORT (0, SPBQ_DONOTUPDATE));
  230.             Data->MaxMessages = (USHORT)Value;
  231.             WinSendDlgItemMsg (hwnd, 136, SPBM_QUERYVALUE, MPFROMP (&Value), MPFROM2SHORT (0, SPBQ_DONOTUPDATE));
  232.             Data->DaysOld = (USHORT)Value;
  233. #elif defined(__NT__)
  234. #endif
  235.          }
  236.          break;
  237.  
  238.       case WM_USER + 2: {
  239. #if defined(__OS2__)
  240.          HWND hwndContainer;
  241.          AREALISTDATA *pRecord;
  242.          RECORDINSERT recordInsert;
  243.          class TMsgData *Msg;
  244.  
  245.          hwndContainer = WinWindowFromID (hwnd, 101);
  246.          WinSetPointer (HWND_DESKTOP, WinQuerySysPointer (HWND_DESKTOP, SPTR_WAIT, FALSE));
  247.  
  248.          if ((Msg = new TMsgData (Cfg->SystemPath)) != NULL) {
  249.             if (Msg->First () == TRUE)
  250.                do {
  251.                   if ((pRecord = (AREALISTDATA *)WinSendMsg (hwndContainer, CM_ALLOCRECORD, (MPARAM)(sizeof (AREALISTDATA) - sizeof (RECORDCORE)), (MPARAM)1)) != NULL) {
  252.                      pRecord->RecordCore.hptrIcon = NULLHANDLE;
  253.                      pRecord->RecordCore.pszIcon = "";
  254.  
  255.                      strcpy (pRecord->Key, Msg->Key);
  256.                      strcpy (pRecord->Description, Msg->Display);
  257.                      sprintf (pRecord->Number, "%u", Msg->Level);
  258.                      sprintf (pRecord->Write, "%u", Msg->WriteLevel);
  259.  
  260.                      pRecord->pszKey = pRecord->Key;
  261.                      pRecord->pszDescription = pRecord->Description;
  262.                      pRecord->pszNumber = pRecord->Number;
  263.                      pRecord->pszWrite = pRecord->Write;
  264.  
  265.                      recordInsert.cb = sizeof (RECORDINSERT);
  266.                      recordInsert.pRecordOrder = (PRECORDCORE)CMA_END;
  267.                      recordInsert.zOrder = (ULONG)CMA_TOP;
  268.                      recordInsert.cRecordsInsert = 1;
  269.                      recordInsert.fInvalidateRecord = FALSE;
  270.                      recordInsert.pRecordParent = NULL;
  271.                      WinSendMsg (hwndContainer, CM_INSERTRECORD, MPFROMP (pRecord), MPFROMP (&recordInsert));
  272.                   }
  273.                } while (Msg->Next () == TRUE);
  274.             delete Msg;
  275.          }
  276.  
  277.          WinSendMsg (hwndContainer, CM_INVALIDATEDETAILFIELDINFO, 0L, 0L);
  278.          WinSetPointer (HWND_DESKTOP, WinQuerySysPointer (HWND_DESKTOP, SPTR_ARROW, FALSE));
  279. #elif defined(__NT__)
  280. #endif
  281.          break;
  282.       }
  283.  
  284. #if defined(__OS2__)
  285.       case WM_CONTROL:
  286.          if (SHORT1FROMMP (mp1) == 101 && status == 3 && SHORT2FROMMP (mp1) == CN_ENTER)
  287.             WinPostMsg (hwnd, WM_COMMAND, MPFROMSHORT (IDOK), 0L);
  288.          break;
  289. #elif defined(__NT__)
  290. #endif
  291.  
  292.       case WM_COMMAND:
  293. #if defined(__OS2__)
  294.          switch (SHORT1FROMMP (mp1)) {
  295.             case 115:      // Add
  296.                Data->New ();
  297.                WinSendMsg (hwnd, WM_USER + 1, 0L, 0L);
  298.                Data->Add ();
  299.                WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  300.                break;
  301.             case 116:      // Insert
  302.                Data->New ();
  303.                WinSendMsg (hwnd, WM_USER + 1, 0L, 0L);
  304.                Data->Insert ();
  305.                WinPostMsg (hwnd, WM_USER, 0L, 0L);
  306.                WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  307.                break;
  308.             case 118:      // Previous
  309.                if (Data->Previous () == TRUE)
  310.                   WinPostMsg (hwnd, WM_USER, 0L, 0L);
  311.                WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  312.                break;
  313.             case 119:      // Next
  314.                if (Data->Next () == TRUE)
  315.                   WinPostMsg (hwnd, WM_USER, 0L, 0L);
  316.                WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  317.                break;
  318.             case 120:      // Delete
  319.                if (WinMessageBox (HWND_DESKTOP, hwnd, "Are you sure ?", "Delete", 0, MB_YESNO|MB_ICONQUESTION|MB_MOVEABLE) == MBID_YES) {
  320.                   Data->Delete ();
  321.                   WinPostMsg (hwnd, WM_USER, 0L, 0L);
  322.                   WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  323.                }
  324.                break;
  325.             case 123:      // Security
  326.                status = 2;
  327. #if defined(__OS2__)
  328.                WinDlgBox (HWND_DESKTOP, NULLHANDLE, MessageDlgProc, NULLHANDLE, 15, NULL);
  329. #elif defined(__NT__)
  330.                Win95DialogBox (hinst, "MSGSECURITY", hwnd, (DLGPROC)MessageDlgProc);
  331. #endif
  332.                WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  333.                status = 0;
  334.                break;
  335.             case 117:      // List
  336.                status = 3;
  337. #if defined(__OS2__)
  338.                if ((USHORT)WinDlgBox (HWND_DESKTOP, NULLHANDLE, MessageDlgProc, NULLHANDLE, 25, NULL) == TRUE)
  339. #elif defined(__NT__)
  340.                if (Win95DialogBox (hinst, "LIST", hwnd, (DLGPROC)MessageDlgProc) == TRUE)
  341. #endif
  342.                   WinPostMsg (hwnd, WM_USER, 0L, 0L);
  343.                WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  344.                status = 0;
  345.                break;
  346.             case 121:      // Links
  347.                status = 1;
  348. #if defined(__OS2__)
  349.                WinDlgBox (HWND_DESKTOP, NULLHANDLE, MessageDlgProc, NULLHANDLE, 24, NULL);
  350. #elif defined(__NT__)
  351.                Win95DialogBox (hinst, "MSGLINKS", hwnd, (DLGPROC)MessageDlgProc);
  352. #endif
  353.                WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  354.                status = 0;
  355.                break;
  356.             case 102: {    // Links / Add
  357.                CHAR Temp[128];
  358.  
  359.                if (status == 1) {
  360.                   WinQueryDlgItemText (hwnd, 128, WinQueryDlgItemTextLength (hwnd, 128) + 1, Temp);
  361.                   if (Temp[0] != '\0')
  362.                      WinSendDlgItemMsg (hwnd, 101, LM_INSERTITEM, MPFROMSHORT (LIT_END), MPFROMP (Temp));
  363.                   WinSetDlgItemText (hwnd, 128, "");
  364.                   WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 128));
  365.                }
  366.                break;
  367.             }
  368.             case 103: {    // Links / Delete
  369.                int item;
  370.  
  371.                if (status == 1) {
  372.                   if (WinMessageBox (HWND_DESKTOP, hwnd, "Are you sure ?", "Delete", 0, MB_YESNO|MB_ICONQUESTION|MB_MOVEABLE) == MBID_YES) {
  373.                      if ((item = (int)WinSendDlgItemMsg (hwnd, 101, LM_QUERYSELECTION, MPFROMSHORT (LIT_FIRST), 0L)) != LIT_NONE)
  374.                         WinSendDlgItemMsg (hwnd, 101, LM_DELETEITEM, MPFROMSHORT (item), 0L);
  375.                   }
  376.                }
  377.                break;
  378.             }
  379.             case IDOK: {
  380.                USHORT i, Items;
  381.                CHAR OldKey[16], Temp[128];
  382.                ULONG Test, Value;
  383.                AREALISTDATA *pRecord;
  384.                class TMsgTag *MsgTag;
  385.                class TEchoLink *Link;
  386.  
  387.                if (status == 0) {
  388.                   strcpy (OldKey, Data->Key);
  389.                   WinSendMsg (hwnd, WM_USER + 1, 0L, 0L);
  390.                   Data->Update ();
  391.                   if (strcmp (OldKey, Data->Key)) {
  392.                      if ((MsgTag = new TMsgTag (Cfg->UserFile)) != NULL) {
  393.                         MsgTag->Change (OldKey, Data->Key);
  394.                         delete MsgTag;
  395.                      }
  396.                   }
  397.                   WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  398.                }
  399.                else if (status == 1) {
  400.                   if ((Link = new TEchoLink (Cfg->SystemPath)) != NULL) {
  401.                      Link->Load (Data->EchoTag);
  402.                      Link->Clear ();
  403.                   }
  404.  
  405.                   if ((Items = (USHORT)WinSendDlgItemMsg (hwnd, 101, LM_QUERYITEMCOUNT, 0L, 0L)) != 0) {
  406.                      for (i = 0; i < Items; i++) {
  407.                         WinSendDlgItemMsg (hwnd, 101, LM_QUERYITEMTEXT, MPFROM2SHORT (i, sizeof (Temp)), MPFROMP (Temp));
  408.                         Link->AddString (Temp);
  409.                      }
  410.                   }
  411.  
  412.                   if (Link != NULL) {
  413.                      Link->Save ();
  414.                      delete Link;
  415.                   }
  416.  
  417.                   WinDismissDlg (hwnd, TRUE);
  418.                }
  419.                else if (status == 2) {
  420.                   WinSendDlgItemMsg (hwnd, 102, SPBM_QUERYVALUE, MPFROMP (&Value), MPFROM2SHORT (0, SPBQ_DONOTUPDATE));
  421.                   Data->Level = (USHORT)Value;
  422.                   WinSendDlgItemMsg (hwnd, 173, SPBM_QUERYVALUE, MPFROMP (&Value), MPFROM2SHORT (0, SPBQ_DONOTUPDATE));
  423.                   Data->WriteLevel = (USHORT)Value;
  424.  
  425.                   Data->AccessFlags = 0L;
  426.                   for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  427.                      if ((CHAR)WinSendDlgItemMsg (hwnd, i, BM_QUERYCHECK, 0L, 0L) == TRUE)
  428.                         Data->AccessFlags |= Test;
  429.                   }
  430.                   Data->DenyFlags = 0L;
  431.                   for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  432.                      if ((CHAR)WinSendDlgItemMsg (hwnd, i, BM_QUERYCHECK, 0L, 0L) == TRUE)
  433.                         Data->DenyFlags |= Test;
  434.                   }
  435.  
  436.                   Data->WriteFlags = 0L;
  437.                   for (i = 174, Test = 0x80000000L; i <= 205; i++, Test >>= 1) {
  438.                      if ((CHAR)WinSendDlgItemMsg (hwnd, i, BM_QUERYCHECK, 0L, 0L) == TRUE)
  439.                         Data->WriteFlags |= Test;
  440.                   }
  441.                   Data->DenyWriteFlags = 0L;
  442.                   for (i = 207, Test = 0x80000000L; i <= 238; i++, Test >>= 1) {
  443.                      if ((CHAR)WinSendDlgItemMsg (hwnd, i, BM_QUERYCHECK, 0L, 0L) == TRUE)
  444.                         Data->DenyWriteFlags |= Test;
  445.                   }
  446.  
  447.                   WinDismissDlg (hwnd, TRUE);
  448.                }
  449.                else if (status == 3) {
  450.                   if ((pRecord = (AREALISTDATA *)WinSendDlgItemMsg (hwnd, 101, CM_QUERYRECORDEMPHASIS, MPFROMSHORT (CMA_FIRST), MPFROMSHORT (CRA_SELECTED))) != NULL)
  451.                      Data->Read (pRecord->Key, FALSE);
  452. /*
  453.                   if ((i = (USHORT)WinSendDlgItemMsg (hwnd, 101, LM_QUERYSELECTION, MPFROMSHORT (LIT_FIRST), 0L)) != LIT_NONE) {
  454.                      WinSendDlgItemMsg (hwnd, 101, LM_QUERYITEMTEXT, MPFROM2SHORT (i, sizeof (Temp)), MPFROMP (Temp));
  455.                      if (Data->First () == TRUE)
  456.                         do {
  457.                            sprintf (Check, "%-15.15s %s", Data->Key, Data->Display);
  458.                            if (!strcmp (Temp, Check))
  459.                               break;
  460.                         } while (Data->Next () == TRUE);
  461.                   }
  462. */
  463.                   WinDismissDlg (hwnd, TRUE);
  464.                }
  465.                break;
  466.             }
  467.             case IDCANCEL:
  468.                if (status != 0)
  469.                   WinDismissDlg (hwnd, FALSE);
  470.                break;
  471.          }
  472.          return ((MRESULT)FALSE);
  473. #elif defined(__NT__)
  474.          switch (wParam) {
  475.             case IDOK:
  476.                Data->Update ();
  477.                break;
  478.          }
  479.          break;
  480. #endif
  481.  
  482.       case WM_CLOSE:
  483. #if defined(__NT__)
  484.          EndDialog (hwnd, FALSE);
  485. #endif
  486.          if (status == 0) {
  487.             if (Data != NULL) {
  488.                delete Data;
  489.                Data = NULL;
  490.             }
  491.          }
  492.          break;
  493.    }
  494.  
  495. #if defined(__OS2__)
  496.    return (WinDefDlgProc (hwnd, msg, mp1, mp2));
  497. #elif defined(__NT__)
  498.    return ((BOOL)FALSE);
  499. #endif
  500. }
  501.  
  502. #if defined(__OS2__)
  503. MRESULT EXPENTRY FileDlgProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  504. #elif defined(__NT__)
  505. BOOL CALLBACK FileDlgProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  506. #endif
  507. {
  508.    static USHORT status = 0;
  509.    static class TFileData *Data = NULL;
  510.  
  511.    switch (msg) {
  512. #if defined(__OS2__)
  513.       case WM_INITDLG: {
  514.          int i;
  515.          LONG nFields;
  516.          ULONG Test;
  517.          HWND hwndContainer;
  518.          CNRINFO cnrInfo;
  519.          PFIELDINFO pFieldInfo, pTopField;
  520.          AREALISTDATA *pRecord;
  521.          FIELDINFOINSERT fieldinsert;
  522.          RECTL rc;
  523.  
  524.          if (status == 0) {
  525.          }
  526.          else if (status == 2) {
  527.             WinSendDlgItemMsg (hwnd, 102, SPBM_SETLIMITS, MPFROMSHORT (65535U), MPFROMSHORT (0L));
  528.             WinSendDlgItemMsg (hwnd, 102, SPBM_SETCURRENTVALUE, MPFROMSHORT (Data->Level), 0L);
  529.  
  530.             for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  531.                if (Data->AccessFlags & Test)
  532.                   WinSendDlgItemMsg (hwnd, i, BM_SETCHECK, MPFROMSHORT (TRUE), 0L);
  533.             }
  534.             for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  535.                if (Data->DenyFlags & Test)
  536.                   WinSendDlgItemMsg (hwnd, i, BM_SETCHECK, MPFROMSHORT (TRUE), 0L);
  537.             }
  538.  
  539.             WinSendDlgItemMsg (hwnd, 173, SPBM_SETLIMITS, MPFROMSHORT (65535U), MPFROMSHORT (0L));
  540.             WinSendDlgItemMsg (hwnd, 173, SPBM_SETCURRENTVALUE, MPFROMSHORT (Data->DownloadLevel), 0L);
  541.  
  542.             for (i = 174, Test = 0x80000000L; i <= 205; i++, Test >>= 1) {
  543.                if (Data->DownloadFlags & Test)
  544.                   WinSendDlgItemMsg (hwnd, i, BM_SETCHECK, MPFROMSHORT (TRUE), 0L);
  545.             }
  546.             for (i = 207, Test = 0x80000000L; i <= 238; i++, Test >>= 1) {
  547.                if (Data->DownloadDenyFlags & Test)
  548.                   WinSendDlgItemMsg (hwnd, i, BM_SETCHECK, MPFROMSHORT (TRUE), 0L);
  549.             }
  550.  
  551.             WinSendDlgItemMsg (hwnd, 242, SPBM_SETLIMITS, MPFROMSHORT (65535U), MPFROMSHORT (0L));
  552.             WinSendDlgItemMsg (hwnd, 242, SPBM_SETCURRENTVALUE, MPFROMSHORT (Data->UploadLevel), 0L);
  553.  
  554.             for (i = 243, Test = 0x80000000L; i <= 274; i++, Test >>= 1) {
  555.                if (Data->UploadFlags & Test)
  556.                   WinSendDlgItemMsg (hwnd, i, BM_SETCHECK, MPFROMSHORT (TRUE), 0L);
  557.             }
  558.             for (i = 276, Test = 0x80000000L; i <= 307; i++, Test >>= 1) {
  559.                if (Data->UploadDenyFlags & Test)
  560.                   WinSendDlgItemMsg (hwnd, i, BM_SETCHECK, MPFROMSHORT (TRUE), 0L);
  561.             }
  562.          }
  563.          else if (status == 3) {
  564.             WinSetWindowText (hwnd, "File Areas List");
  565.  
  566.             if ((hwndContainer = WinWindowFromID (hwnd, 101)) != NULLHANDLE) {
  567.                memset (&cnrInfo, 0, sizeof (CNRINFO));
  568.                cnrInfo.cb = sizeof (CNRINFO);
  569.                cnrInfo.flWindowAttr = CV_DETAIL|CA_DETAILSVIEWTITLES;
  570.                WinSendMsg (hwndContainer, CM_SETCNRINFO, MPFROMP (&cnrInfo), MPFROMLONG (CMA_FLWINDOWATTR));
  571.  
  572.                nFields = 5;
  573.                pFieldInfo = (PFIELDINFO)WinSendMsg (hwndContainer, CM_ALLOCDETAILFIELDINFO, (MPARAM)nFields, (MPARAM)0);
  574.                pTopField = pFieldInfo;
  575.  
  576.                pFieldInfo->cb = sizeof (FIELDINFO);
  577.                pFieldInfo->pTitleData = "Key";
  578.                pFieldInfo->flData = CFA_STRING|CFA_VCENTER|CFA_LEFT|CFA_SEPARATOR|CFA_HORZSEPARATOR;
  579.                pFieldInfo->flTitle = CFA_FITITLEREADONLY|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR;
  580.                pFieldInfo->offStruct = (ULONG)&pRecord->pszKey - (ULONG)pRecord;
  581.                pFieldInfo->pUserData = NULL;
  582.                pFieldInfo->cxWidth = 0L;
  583.  
  584.                pFieldInfo = pFieldInfo->pNextFieldInfo;
  585.                pFieldInfo->cb = sizeof (FIELDINFO);
  586.                pFieldInfo->pTitleData = "Level";
  587.                pFieldInfo->flData = CFA_STRING|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR|CFA_HORZSEPARATOR;
  588.                pFieldInfo->flTitle = CFA_FITITLEREADONLY|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR;
  589.                pFieldInfo->offStruct = (ULONG)&pRecord->pszNumber - (ULONG)pRecord;
  590.                pFieldInfo->pUserData = NULL;
  591.                pFieldInfo->cxWidth = 0L;
  592.  
  593.                pFieldInfo = pFieldInfo->pNextFieldInfo;
  594.                pFieldInfo->cb = sizeof (FIELDINFO);
  595.                pFieldInfo->pTitleData = "Download";
  596.                pFieldInfo->flData = CFA_STRING|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR|CFA_HORZSEPARATOR;
  597.                pFieldInfo->flTitle = CFA_FITITLEREADONLY|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR;
  598.                pFieldInfo->offStruct = (ULONG)&pRecord->pszDownload - (ULONG)pRecord;
  599.                pFieldInfo->pUserData = NULL;
  600.                pFieldInfo->cxWidth = 0L;
  601.  
  602.                pFieldInfo = pFieldInfo->pNextFieldInfo;
  603.                pFieldInfo->cb = sizeof (FIELDINFO);
  604.                pFieldInfo->pTitleData = "Upload";
  605.                pFieldInfo->flData = CFA_STRING|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR|CFA_HORZSEPARATOR;
  606.                pFieldInfo->flTitle = CFA_FITITLEREADONLY|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR;
  607.                pFieldInfo->offStruct = (ULONG)&pRecord->pszUpload - (ULONG)pRecord;
  608.                pFieldInfo->pUserData = NULL;
  609.                pFieldInfo->cxWidth = 0L;
  610.  
  611.                pFieldInfo = pFieldInfo->pNextFieldInfo;
  612.                pFieldInfo->cb = sizeof (FIELDINFO);
  613.                pFieldInfo->pTitleData = "Description";
  614.                pFieldInfo->flData = CFA_STRING|CFA_VCENTER|CFA_LEFT|CFA_SEPARATOR|CFA_HORZSEPARATOR;
  615.                pFieldInfo->flTitle = CFA_FITITLEREADONLY|CFA_VCENTER|CFA_CENTER|CFA_SEPARATOR;
  616.                pFieldInfo->offStruct = (ULONG)&pRecord->pszDescription - (ULONG)pRecord;
  617.                pFieldInfo->pUserData = NULL;
  618.                pFieldInfo->cxWidth = 0L;
  619.  
  620.                fieldinsert.cb = sizeof (FIELDINFOINSERT);
  621.                fieldinsert.pFieldInfoOrder = (PFIELDINFO)CMA_FIRST;
  622.                fieldinsert.fInvalidateFieldInfo = TRUE;
  623.                fieldinsert.cFieldInfoInsert = nFields;
  624.                WinSendMsg (hwndContainer, CM_INSERTDETAILFIELDINFO, MPFROMP (pTopField), MPFROMP (&fieldinsert));
  625.             }
  626.             WinPostMsg (hwnd, WM_USER + 2, 0L, 0L);
  627.          }
  628.          break;
  629.       }
  630. #elif defined(__NT__)
  631.       case WM_INITDIALOG: {
  632.          RECT rc;
  633.  
  634.          lParam = lParam;
  635.          if (status == 0) {
  636.          }
  637.          else if (status == 3) {
  638.             SetWindowText (hwnd, "File Areas List");
  639.             PostMessage (hwnd, WM_USER + 2, 0L, 0L);
  640.          }
  641.          return ((BOOL)TRUE);
  642.       }
  643.  
  644.       case WM_CTLCOLORBTN:
  645.       case WM_CTLCOLORSTATIC:
  646.       case WM_CTLCOLORDLG: {
  647.          LOGBRUSH logBrush;
  648.  
  649.          SetBkColor ((HDC)wParam, GetSysColor (COLOR_MENU));
  650.  
  651.          logBrush.lbStyle = BS_SOLID;
  652.          logBrush.lbColor = GetSysColor (COLOR_MENU);
  653.          logBrush.lbHatch = 0;
  654.  
  655.          return ((BOOL)CreateBrushIndirect (&logBrush));
  656.       }
  657. #endif
  658.  
  659. #if defined(__OS2__)
  660.       case WM_USER + 2: {
  661.          HWND hwndContainer;
  662.          AREALISTDATA *pRecord;
  663.          RECORDINSERT recordInsert;
  664.          class TFileData *File;
  665.  
  666.          hwndContainer = WinWindowFromID (hwnd, 101);
  667.          WinSetPointer (HWND_DESKTOP, WinQuerySysPointer (HWND_DESKTOP, SPTR_WAIT, FALSE));
  668.  
  669.          if ((File = new TFileData (Cfg->SystemPath)) != NULL) {
  670.             if (File->First () == TRUE)
  671.                do {
  672.                   if ((pRecord = (AREALISTDATA *)WinSendMsg (hwndContainer, CM_ALLOCRECORD, (MPARAM)(sizeof (AREALISTDATA) - sizeof (RECORDCORE)), (MPARAM)1)) != NULL) {
  673.                      pRecord->RecordCore.hptrIcon = NULLHANDLE;
  674.                      pRecord->RecordCore.pszIcon = "";
  675.  
  676.                      strcpy (pRecord->Key, File->Key);
  677.                      strcpy (pRecord->Description, File->Display);
  678.                      sprintf (pRecord->Number, "%u", File->Level);
  679.                      sprintf (pRecord->Download, "%u", File->DownloadLevel);
  680.                      sprintf (pRecord->Upload, "%u", File->UploadLevel);
  681.  
  682.                      pRecord->pszKey = pRecord->Key;
  683.                      pRecord->pszDescription = pRecord->Description;
  684.                      pRecord->pszNumber = pRecord->Number;
  685.                      pRecord->pszUpload = pRecord->Upload;
  686.                      pRecord->pszDownload = pRecord->Download;
  687.  
  688.                      recordInsert.cb = sizeof (RECORDINSERT);
  689.                      recordInsert.pRecordOrder = (PRECORDCORE)CMA_END;
  690.                      recordInsert.zOrder = (ULONG)CMA_TOP;
  691.                      recordInsert.cRecordsInsert = 1;
  692.                      recordInsert.fInvalidateRecord = FALSE;
  693.                      recordInsert.pRecordParent = NULL;
  694.                      WinSendMsg (hwndContainer, CM_INSERTRECORD, MPFROMP (pRecord), MPFROMP (&recordInsert));
  695.                   }
  696.                } while (File->Next () == TRUE);
  697.             delete File;
  698.          }
  699.  
  700.          WinSendMsg (hwndContainer, CM_INVALIDATEDETAILFIELDINFO, 0L, 0L);
  701.          WinSetPointer (HWND_DESKTOP, WinQuerySysPointer (HWND_DESKTOP, SPTR_ARROW, FALSE));
  702.          break;
  703.       }
  704. #endif
  705.  
  706. #if defined(__OS2__)
  707.       case WM_CONTROL:
  708.          if (SHORT1FROMMP (mp1) == 101 && status == 3 && SHORT2FROMMP (mp1) == CN_ENTER)
  709.             WinPostMsg (hwnd, WM_COMMAND, MPFROMSHORT (IDOK), 0L);
  710.          break;
  711. #elif defined(__NT__)
  712. #endif
  713.  
  714.       case WM_COMMAND:
  715. #if defined(__OS2__)
  716.          switch (SHORT1FROMMP (mp1)) {
  717. #elif defined(__NT__)
  718.          switch (wParam) {
  719. #endif
  720.             case 120:      // Delete
  721. #if defined(__OS2__)
  722.                if (WinMessageBox (HWND_DESKTOP, hwnd, "Are you sure ?", "Delete", 0, MB_YESNO|MB_ICONQUESTION|MB_MOVEABLE) == MBID_YES) {
  723. #elif defined(__NT__)
  724.                if (MessageBox (hwnd, "Are you sure ?", "Delete", MB_YESNO|MB_ICONQUESTION) == IDYES) {
  725. #endif
  726.                   Data->Delete ();
  727. #if defined(__OS2__)
  728.                   WinPostMsg (hwnd, WM_USER, 0L, 0L);
  729.                   WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  730. #elif defined(__NT__)
  731.                   PostMessage (hwnd, WM_USER, 0, 0L);
  732. #endif
  733.                }
  734.                break;
  735.             case 109:      // Security
  736.                status = 2;
  737. #if defined(__OS2__)
  738.                WinDlgBox (HWND_DESKTOP, NULLHANDLE, FileDlgProc, NULLHANDLE, 16, NULL);
  739.                WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  740. #elif defined(__NT__)
  741.                DialogBox (hinst, "FILESECURITY", hwnd, (DLGPROC)FileDlgProc);
  742. #endif
  743.                status = 0;
  744.                break;
  745.             case 117:      // List
  746.                status = 3;
  747. #if defined(__OS2__)
  748.                if ((USHORT)WinDlgBox (HWND_DESKTOP, NULLHANDLE, FileDlgProc, NULLHANDLE, 25, NULL) == TRUE)
  749.                   WinPostMsg (hwnd, WM_USER, 0L, 0L);
  750.                WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  751. #elif defined(__NT__)
  752.                if (DialogBox (hinst, "LIST", hwnd, (DLGPROC)FileDlgProc) == TRUE)
  753.                   PostMessage (hwnd, WM_USER, 0L, 0L);
  754. #endif
  755.                status = 0;
  756.                break;
  757.             case IDOK: {
  758. #if defined(__OS2__)
  759.                USHORT i;
  760.                ULONG Test, Value;
  761.                AREALISTDATA *pRecord;
  762.  
  763.                if (status == 0) {
  764.                   WinSendMsg (hwnd, WM_USER + 1, 0L, 0L);
  765.                   Data->Update ();
  766.                   WinSetFocus (HWND_DESKTOP, WinWindowFromID (hwnd, 102));
  767.                }
  768.                else if (status == 2) {
  769.                   WinSendDlgItemMsg (hwnd, 102, SPBM_QUERYVALUE, MPFROMP (&Value), MPFROM2SHORT (0, SPBQ_DONOTUPDATE));
  770.                   Data->Level = (USHORT)Value;
  771.                   WinSendDlgItemMsg (hwnd, 173, SPBM_QUERYVALUE, MPFROMP (&Value), MPFROM2SHORT (0, SPBQ_DONOTUPDATE));
  772.                   Data->DownloadLevel = (USHORT)Value;
  773.                   WinSendDlgItemMsg (hwnd, 242, SPBM_QUERYVALUE, MPFROMP (&Value), MPFROM2SHORT (0, SPBQ_DONOTUPDATE));
  774.                   Data->UploadLevel = (USHORT)Value;
  775.  
  776.                   Data->AccessFlags = 0L;
  777.                   for (i = 104, Test = 0x80000000L; i <= 135; i++, Test >>= 1) {
  778.                      if ((CHAR)WinSendDlgItemMsg (hwnd, i, BM_QUERYCHECK, 0L, 0L) == TRUE)
  779.                         Data->AccessFlags |= Test;
  780.                   }
  781.                   Data->DenyFlags = 0L;
  782.                   for (i = 137, Test = 0x80000000L; i <= 168; i++, Test >>= 1) {
  783.                      if ((CHAR)WinSendDlgItemMsg (hwnd, i, BM_QUERYCHECK, 0L, 0L) == TRUE)
  784.                         Data->DenyFlags |= Test;
  785.                   }
  786.  
  787.                   Data->DownloadFlags = 0L;
  788.                   for (i = 174, Test = 0x80000000L; i <= 205; i++, Test >>= 1) {
  789.                      if ((CHAR)WinSendDlgItemMsg (hwnd, i, BM_QUERYCHECK, 0L, 0L) == TRUE)
  790.                         Data->DownloadFlags |= Test;
  791.                   }
  792.                   Data->DownloadDenyFlags = 0L;
  793.                   for (i = 207, Test = 0x80000000L; i <= 238; i++, Test >>= 1) {
  794.                      if ((CHAR)WinSendDlgItemMsg (hwnd, i, BM_QUERYCHECK, 0L, 0L) == TRUE)
  795.                         Data->DownloadDenyFlags |= Test;
  796.                   }
  797.  
  798.                   Data->UploadFlags = 0L;
  799.                   for (i = 243, Test = 0x80000000L; i <= 274; i++, Test >>= 1) {
  800.                      if ((CHAR)WinSendDlgItemMsg (hwnd, i, BM_QUERYCHECK, 0L, 0L) == TRUE)
  801.                         Data->UploadFlags |= Test;
  802.                   }
  803.                   Data->UploadDenyFlags = 0L;
  804.                   for (i = 276, Test = 0x80000000L; i <= 307; i++, Test >>= 1) {
  805.                      if ((CHAR)WinSendDlgItemMsg (hwnd, i, BM_QUERYCHECK, 0L, 0L) == TRUE)
  806.                         Data->UploadDenyFlags |= Test;
  807.                   }
  808.  
  809.                   WinDismissDlg (hwnd, TRUE);
  810.                }
  811.                else if (status == 3) {
  812.                   if ((pRecord = (AREALISTDATA *)WinSendDlgItemMsg (hwnd, 101, CM_QUERYRECORDEMPHASIS, MPFROMSHORT (CMA_FIRST), MPFROMSHORT (CRA_SELECTED))) != NULL)
  813.                      Data->Read (pRecord->Key, FALSE);
  814.                   WinDismissDlg (hwnd, TRUE);
  815.                }
  816. #elif defined(__NT__)
  817.                if (status == 0) {
  818.                   SendMessage (hwnd, WM_USER + 1, 0, 0L);
  819.                   Data->Update ();
  820.                }
  821. #endif
  822.                break;
  823.             }
  824.             case IDCANCEL:
  825.                if (status != 0)
  826. #if defined(__OS2__)
  827.                   WinDismissDlg (hwnd, FALSE);
  828. #elif defined(__NT__)
  829.                   EndDialog (hwnd, FALSE);
  830. #endif
  831.                break;
  832.          }
  833. #if defined(__OS2__)
  834.          return ((MRESULT)FALSE);
  835. #elif defined(__NT__)
  836.          break;
  837. #endif
  838.  
  839.       case WM_CLOSE:
  840.          if (status == 0) {
  841.             if (Data != NULL) {
  842.                delete Data;
  843.                Data = NULL;
  844.             }
  845.          }
  846. #if defined(__NT__)
  847.          EndDialog (hwnd, FALSE);
  848. #endif
  849.          break;
  850.    }
  851.  
  852. #if defined(__OS2__)
  853.    return (WinDefDlgProc (hwnd, msg, mp1, mp2));
  854. #elif defined(__NT__)
  855.    return ((BOOL)FALSE);
  856. #endif
  857. }
  858.  
  859.