Beispiel #1
0
USHORT CDialog::GetDlgItemTextLength (int id)
{
#if defined(__OS2__)
   return ((USHORT)(WinQueryDlgItemTextLength (m_hWnd, id) + 1));
#elif defined(__NT__)
   return ((USHORT)(::GetWindowTextLength (GetDlgItem (m_hWnd, id)) + 1));
#endif
}
static MRESULT EXPENTRY AreaMsgBaseProc(HWND parent, ULONG message, MPARAM mp1, MPARAM mp2)
{
   extern AREALIST arealiste;
   extern HWND hwndhelp;
   static AREADEFLIST *pArea=NULL;
   char pchTemp[LEN_PATHNAME+1];
   SHORT sTemp;

   switch(message)
   {
      case WM_INITDLG:
         pArea=((AREAPAR *)mp2)->pAreaDef;
         WinSubclassWindow(WinWindowFromID(parent, IDD_AS_MSGBASE+9),
                           FileEntryProc);

         WinSendDlgItemMsg(parent, IDD_AS_MSGBASE+9,
                           EM_SETTEXTLIMIT,
                           MPFROMSHORT(LEN_PATHNAME),
                           (MPARAM) NULL);
         if (pArea)
         {
            WinSetDlgItemText(parent, IDD_AS_MSGBASE+9,
                              pArea->areadata.pathfile);

            switch(pArea->areadata.areaformat)
            {
               case AREAFORMAT_FTS:
                  WinCheckButton(parent, IDD_AS_MSGBASE+2, TRUE);
                  break;

               case AREAFORMAT_SQUISH:
                  WinCheckButton(parent, IDD_AS_MSGBASE+3, TRUE);
                  break;

               case AREAFORMAT_JAM:
                  WinCheckButton(parent, IDD_AS_MSGBASE+4, TRUE);
                  break;

               default:
                  WinCheckButton(parent, IDD_AS_MSGBASE+2, TRUE);
                  break;
            }
            switch(pArea->areadata.areatype)
            {
               case AREATYPE_NET:
                  WinCheckButton(parent, IDD_AS_MSGBASE+6, TRUE);
                  break;

               case AREATYPE_ECHO:
                  WinCheckButton(parent, IDD_AS_MSGBASE+7, TRUE);
                  break;

               case AREATYPE_LOCAL:
                  WinCheckButton(parent, IDD_AS_MSGBASE+12, TRUE);
                  break;
            }
            if (pArea->areadata.ulAreaOpt & AREAOPT_FROMCFG)
            {
               WinEnableControl(parent, IDD_AS_MSGBASE+2, FALSE);
               WinEnableControl(parent, IDD_AS_MSGBASE+3, FALSE);
               WinEnableControl(parent, IDD_AS_MSGBASE+4, FALSE);
               WinEnableControl(parent, IDD_AS_MSGBASE+6, FALSE);
               WinEnableControl(parent, IDD_AS_MSGBASE+7, FALSE);
               WinEnableControl(parent, IDD_AS_MSGBASE+12, FALSE);
               WinSendDlgItemMsg(parent, IDD_AS_MSGBASE+9, EM_SETREADONLY,
                                 (MPARAM)TRUE, (MPARAM) NULL);
               WinEnableControl(parent, IDD_AS_MSGBASE+10, FALSE);
            }
         }
         WinDefDlgProc(parent, message, mp1, mp2);
         SetFocusControl(parent, IDD_AS_MSGBASE+9);
         return (MRESULT) TRUE;

      case WM_CLOSE:
      case WM_DESTROY:
         if (!WinQueryWindowULong(parent, QWL_USER))
         {
            WinQueryDlgItemText(parent, IDD_AS_MSGBASE+9, LEN_PATHNAME+1,
                                pchTemp);
            if (strcmp(pArea->areadata.pathfile, pchTemp))
            {
               strcpy(pArea->areadata.pathfile, pchTemp);
               arealiste.bDirty = TRUE;
               pArea->dirty=TRUE;
            }

            if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+2))
               sTemp=AREAFORMAT_FTS;
            else
               if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+3))
                  sTemp=AREAFORMAT_SQUISH;
               else
                  if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+4))
                     sTemp=AREAFORMAT_JAM;
                  else
                     sTemp=AREAFORMAT_FTS;

            if (sTemp!=pArea->areadata.areaformat)
            {
               pArea->areadata.areaformat=sTemp;
               arealiste.bDirty = TRUE;
               pArea->dirty=TRUE;
            }

            if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+6))
               sTemp=AREATYPE_NET;
            else
               if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+7))
                  sTemp=AREATYPE_ECHO;
               else
                  if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+12))
                     sTemp=AREATYPE_LOCAL;
                  else
                     sTemp=AREATYPE_NET;

            if (sTemp != pArea->areadata.areatype)
            {
               pArea->areadata.areatype=sTemp;
               arealiste.bDirty = TRUE;
               pArea->dirty=TRUE;
            }
         }
         break;

      case WM_COMMAND:
         if (SHORT1FROMMP(mp2)==CMDSRC_PUSHBUTTON)
         {
            if(SHORT1FROMMP(mp1)==IDD_AS_MSGBASE+10)
            {
               WinQueryDlgItemText(parent, IDD_AS_MSGBASE+9,
                                   LEN_PATHNAME+1, pchTemp);
               if (GetPathname(parent, pchTemp)==DID_OK)
               {
                  char drive[_MAX_DRIVE];
                  char path[_MAX_DIR];
                  char name[_MAX_FNAME];
                  char ext[_MAX_EXT];

                  _splitpath(pchTemp, drive, path, name, ext);
                  if (WinQueryButtonCheckstate(parent, IDD_AS_MSGBASE+3))
                     _makepath(pchTemp, drive, path, name, "");
                  else
                  {
                    _makepath(pchTemp, drive, path, "", "");
                    pchTemp[strlen(pchTemp)-1]='\0';
                  }
                  WinSetDlgItemText(parent, IDD_AS_MSGBASE+9,
                                    pchTemp);
                  arealiste.bDirty = TRUE;
               }
            }
         }
         return (MRESULT) FALSE;

      case APM_REQCLOSE:
         if (WinQueryDlgItemTextLength(parent, IDD_AS_MSGBASE+9)==0)
         {
            /* Fehler, kein Pfadname */
            if (MessageBox(parent, IDST_MSG_NOPATHFILE, 0,
                           IDD_NOPATHFILE, MB_RETRYCANCEL | MB_ERROR) == MBID_CANCEL)
                return (MRESULT) 2;
            else
                return (MRESULT) 1;
         }
         return (MRESULT) 0;

      case APM_CANCEL:
         WinSetWindowULong(parent, QWL_USER, 1);
         break;

      default:
         break;
   }
   return WinDefDlgProc(parent,message,mp1,mp2);
}
Beispiel #3
0
MRESULT EXPENTRY fnwpNotifyDlg(HWND hwnd,USHORT msg,MPARAM mp1,MPARAM mp2)
  {
  static MSG *pMessage;
  NOTIFYLST *pNotify;
  ULONG ulSubNumber;
  ULONG ulGroupNumber;
  int iMsgLen;
  USHORT usLength;
  USHORT usSubCount;
  ULONG *pulSubNum;
  char szMessage[80];
  int iIndex;
  static TID tid;
  BYTE *pData;

  switch (msg)
    {
    case WM_INITDLG:
      pMessage = (MSG *)mp2;
      bNotifyLoop = FALSE;
      WinSendDlgItemMsg(hwnd,NOTIFY_SUB_NUMBER,
                                SPBM_SETLIMITS,
                                (MPARAM)usSubscriberListCount,
                                (MPARAM)1);
      WinSendDlgItemMsg(hwnd,NOTIFY_MESSAGE,MLM_FORMAT,(MPARAM)MLFIE_WINFMT,(MPARAM)NULL);
      break;
    case WM_COMMAND:
      switch(SHORT1FROMMP(mp1))
        {
        case DID_OK:
          if (bNotifyLoop)
            break;
          WinSendDlgItemMsg(hwnd,NOTIFY_SUB_NUMBER,SPBM_QUERYVALUE,&ulSubNumber,MPFROM2SHORT(0,SPBQ_DONOTUPDATE));
          iMsgLen = WinQueryDlgItemTextLength(hwnd,NOTIFY_MESSAGE);
//          iMsgLen = (int)WinSendDlgItemMsg(hwnd,NOTIFY_MESSAGE,MLM_QUERYTEXTLENGTH,(MPARAM)NULL,(MPARAM)NULL);
          if (iMsgLen <= 0)
            {
            sprintf(szMessage,"Message is too short, length = %u",iMsgLen);
            MessageBox(hwnd,szMessage);
            break;
            }
          if (astSubList[ulSubNumber].usMaxMsgLen < iMsgLen)
            {
            sprintf(szMessage,"Message is to long for defined subscriber, remove at least %u characters.",(iMsgLen - astSubList[ulSubNumber].usMaxMsgLen));
            MessageBox(hwnd,szMessage);
            break;
            }
          pNotify = (NOTIFYLST *)&pMessage->byData;
          pNotify->usSubCount = 1;
          pNotify->usGroupCount = 0;
          pNotify->usMsgLen = (USHORT)iMsgLen;
          pData = &pNotify->byData;
          iMsgLen = WinQueryDlgItemText(hwnd,NOTIFY_MESSAGE,(iMsgLen + 1),pData);
          pulSubNum = (ULONG *)(pData + iMsgLen);
          usSubCount = 0;
          for (iIndex = 0;iIndex < pNotify->usSubCount;iIndex++)
            {
            usSubCount++;
            *pulSubNum = (ULONG)ulSubNumber;
            pulSubNum++;
            }
          for (iIndex = 0;iIndex < pNotify->usGroupCount;iIndex++)
            {
            usSubCount++;
            *pulSubNum = (ULONG)ulGroupNumber;
            pulSubNum++;
            }
          usLength = ((sizeof(ULONG) * usSubCount) + (USHORT)iMsgLen);
          pMessage->cbDataSize = (usLength + sizeof(NOTIFYLST) - 1);
          if (Checked(hwnd,NOTIFY_CONTINUOUSLY))
            {
            pMessage->fMessageType = REQ_NOTIFY;
            pMessage->cbSize = (pMessage->cbDataSize + sizeof(MSG) - 1);
            bNotifyLoop = TRUE;
            pNotifyLoopMsg = pMessage;
            DosCreateThread(&tid,(PFNTHREAD)NotifyLoopThread,(ULONG)pMessage,0,8192);
            }
          else
            WinDismissDlg(hwnd,TRUE);
          break;
        case DID_CANCEL:
          if (bNotifyLoop)
            DosKillThread(tid);
          WinDismissDlg(hwnd,FALSE);
          break;
        default:
          return(WinDefDlgProc(hwnd,msg,mp1,mp2));
        }
      break;
    default:
      return(WinDefDlgProc(hwnd,msg,mp1,mp2));
    }
  return(FALSE);
  }
MRESULT EXPENTRY MaskDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) {
   static PMASKSEL pmask;
   static BOOL flag = FALSE;   // TRUE se Š stato aggiunto o tolto un elemento
   static int idx;             // posizione item selezionato o di inserzione

   switch (msg) {
      case WM_INITDLG: {
         CHAR buf[FACESIZE];
         PSZ pszCur;
         int len;
         pmask = (PMASKSEL)PVOIDFROMMP(mp2);      // recupera indirizzo dati
         // imposta il font della barra del titolo:
         PrfQueryProfileString(HINI_USERPROFILE, "PM_SystemFonts",
                               "WindowTitles", "9.WarpSans", buf, FACESIZE);
         WinSetPresParam(WinWindowFromID(hwnd, FID_TITLEBAR), PP_FONTNAMESIZE,
                         sstrlen(buf) + 1, (PVOID)(buf));
         WinSetWindowPos(hwnd, HWND_BOTTOM, pmask->pos.x, pmask->pos.y, 0, 0,
                         SWP_MOVE | SWP_SHOW);    // visualizza la finestra
         pszCur = pmask->pszExt;
         DlgEFSetTxtLimit(hwnd, COMBO_MASK, 63);
         // riempie la listbox
         while (len = sstrlen(pszCur)) {
            DlgLboxInsertItem(hwnd, COMBO_MASK, LIT_SORTASCENDING, pszCur);
            pszCur += len + 1;
         } /* endwhile */
         } // end case WM_INITDLG:
         break;
      case WM_CONTROL:
         switch (SHORT2FROMMP(mp1)) {
            case CBN_EFCHANGE: {          // cambiamento testo
               BOOL enable;
               // pulsante OK abilitato se c'e' testo nell' entrifield
               enable = WinQueryDlgItemTextLength(hwnd, COMBO_MASK);
               WinEnableControl(hwnd, MASK_OK, enable);
               // pulsante ADD abilitato se c'Š testo non gi… presente
               WinQueryDlgItemText(hwnd, COMBO_MASK, 64, pmask->achSel);
               idx = isInListBox(hwnd, pmask->achSel, COMBO_MASK); 
               WinEnableControl(hwnd, MASK_STORE, enable && (idx < 0));
               // pulsante REMOVE abilitato se testo EF == item lista
               WinEnableControl(hwnd, MASK_DEL, idx >= 0);
               } // end case CBN_EFCHANGE:
               break;
            case CBN_LBSELECT:            // selezione item
               idx = isInListBox(hwnd, pmask->achSel, COMBO_MASK);
               WinEnableControl(hwnd, MASK_DEL, idx >= 0);
               break;
            default:
              break;
         } /* endswitch */
         break;
      case WM_COMMAND:
         switch (LOUSHORT(mp1)) {
            case MASK_OK:
               WinQueryDlgItemText(hwnd, COMBO_MASK, 64, pmask->achSel);
               if (flag)    // eventualmente aggiorna lista filespec
                  ProcMaskDlgExit(hwnd, pmask);
               SaveMaskDlgPos(hwnd, pmask);
               WinDismissDlg(hwnd, TRUE);
               break;
            case MASK_STORE:
               flag = TRUE;
               DlgLboxInsertItem(hwnd, COMBO_MASK, LIT_SORTASCENDING,
                                 pmask->achSel);
               DlgLboxSelectItem(hwnd, COMBO_MASK, -idx - 1);
               WinEnableControl(hwnd, MASK_STORE, FALSE);
               break;
            case MASK_DEL:
               flag = TRUE;
               idx = DlgLboxQuerySelectedItem(hwnd, COMBO_MASK);
               DlgLboxDeleteItem(hwnd, COMBO_MASK, idx);
               WinSetDlgItemText(hwnd, COMBO_MASK, "");
               break;
            default: 
               if (flag)    // eventualmente aggiorna lista filespec
                  ProcMaskDlgExit(hwnd, pmask);
               SaveMaskDlgPos(hwnd, pmask);
               WinDismissDlg(hwnd, FALSE);
               break;
         } /* endswitch */
         break;
      case WM_CLOSE:
         if (flag)    // eventualmente aggiorna lista filespec
            ProcMaskDlgExit(hwnd, pmask);
         SaveMaskDlgPos(hwnd, pmask);
         WinDismissDlg(hwnd, FALSE);
         break;
      default: 
         return WinDefDlgProc(hwnd, msg, mp1, mp2);
   } // end switch
   return (MRESULT) FALSE;
}
//=============================================================================
// Dialog procedure
//=============================================================================
MRESULT EXPENTRY DlgMenu (HWND hwndDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
  {
  unsigned int i, j, k, num, slider, masklen, subnetbit, hostbit;
  unsigned int numsubnet, numhost, numtotal;
  unsigned char InField[4], OutScale[3], class[2] = "\0", OutMsg[48];
  unsigned char currnet[4], netstart[4], netstop[4], broadcast[4];
  static char ErrAddr[] = "Wrong IP address";
  static char ErrMask[] = "Wrong network mask";

  switch (msg)
    {
//-----------------------------------------------------------------------------
// Handle the initialization of the dialog
//-----------------------------------------------------------------------------
    case WM_INITDLG:
      {
//-----------------------------------------------------------------------------
// Set icon
//-----------------------------------------------------------------------------
      HPOINTER hptr = (HPOINTER)WinLoadPointer(HWND_DESKTOP, NULLHANDLE, 1);
      WinSendMsg(hwndDlg, WM_SETICON, (MPARAM) hptr, 0l);
      for ( i=0; i<4; i++ )
        WinSendDlgItemMsg(hwndDlg, EF_A1+i, EM_SETTEXTLIMIT, (MPARAM)3, 0);

      WinSendDlgItemMsg(hwndDlg,
                        SBH,
                        SLM_SETTICKSIZE,
                        MPFROM2SHORT(SMA_SETALLTICKS, 3),
                        NULL);
      for ( i=0; i<=32; i+=8 )
        {
        itoa(i, OutScale, 10);
        WinSendDlgItemMsg(hwndDlg,
                          SBH,
                          SLM_SETSCALETEXT,
                          MPFROMLONG(i),
                          MPFROMP(OutScale));
        }
      break;
      }
//-----------------------------------------------------------------------------
// Handle WM_COMMAND
//-----------------------------------------------------------------------------
    case WM_COMMAND:
      {
      switch(SHORT1FROMMP(mp1))
        {
//-----------------------------------------------------------------------------
// Close the dialog
//-----------------------------------------------------------------------------
        case PB_EXIT:
          {
          WinSendMsg(hwndDlg, WM_CLOSE, 0L, 0L);
          break;
          }
//-----------------------------------------------------------------------------
// Calculate
//-----------------------------------------------------------------------------
        case PB_CALCULATE:
          {
          WinSetDlgItemText(hwndDlg, LT_NET,  "");
          WinSetDlgItemText(hwndDlg, TXT_MB,  "");
          WinSetDlgItemText(hwndDlg, TXT_M,   "");
          WinSetDlgItemText(hwndDlg, TXT_SB,  "");
          WinSetDlgItemText(hwndDlg, TXT_HB,  "");
          WinSetDlgItemText(hwndDlg, TXT_NS,  "");
          WinSetDlgItemText(hwndDlg, TXT_NH,  "");
          WinSetDlgItemText(hwndDlg, TXT_T,   "");
          WinSetDlgItemText(hwndDlg, TXT_CN,  "");
          WinSetDlgItemText(hwndDlg, TXT_CB,  "");
          WinSetDlgItemText(hwndDlg, TXT_CHR, "");

          for ( i=0; i<4; i++ )
            {
//-----------------------------------------------------------------------------
// Разберем поля IP-адреса
//-----------------------------------------------------------------------------
            if ( (num=WinQueryDlgItemTextLength(hwndDlg, EF_A1+i)) == 0 )
              {
              SendErrMsg(hwndDlg, ErrAddr);
              return (0);
              }

            WinQueryDlgItemText(hwndDlg, EF_A1+i, sizeof(InField), InField);
            for ( j=0; j<num; j++)
              if ( isdigit(InField[j]) == 0 )
                {
                SendErrMsg(hwndDlg, ErrAddr);
                return (0);
                }

            if ( (num=atoi(InField)) > 255 )
              {
              SendErrMsg(hwndDlg, ErrAddr);
              return (0);
              }

            addr[i] = num;
            }
//-----------------------------------------------------------------------------
// Разберем адрес IP
//-----------------------------------------------------------------------------
          memset(network, 0, sizeof(network));
          if ( (addr[0] & '\x80') == '\x00' )
            {
            class[0] = 'A';
            i = 1;
            }
          else
            if ( (addr[0] & '\xc0') == '\x80' )
              {
              class[0] = 'B';
              i = 2;
              }
            else
              if ( (addr[0] & '\xe0') == '\xc0' )
                {
                class[0] = 'C';
                i = 3;
                }
              else
                {
                SendErrMsg(hwndDlg, ErrAddr);
                return (0);
                }
          masklen = 8 * i;

          for ( j=0; j<i; j++ ) network[j] = addr[j];
          sprintf(OutMsg, "Class %s network %d.%d.%d.%d", class,
                  network[0], network[1], network[2], network[3]);
          WinSetDlgItemText(hwndDlg, LT_NET, OutMsg);
//-----------------------------------------------------------------------------
// Разберем поля маски
//-----------------------------------------------------------------------------
          slider =
              (ULONG)WinSendDlgItemMsg(hwndDlg,
                                       SBH,
                                       SLM_QUERYSLIDERINFO,
                                       MPFROM2SHORT(SMA_SLIDERARMPOSITION,
                                                    SMA_INCREMENTVALUE),
                                       NULL);

          if ( (slider<masklen) || (slider==(masklen+1)) || (slider>=31) )
            {
            SendErrMsg(hwndDlg, ErrMask);
            return (0);
            }

          sprintf(OutMsg, "%d", slider);
          WinSetDlgItemText(hwndDlg, TXT_MB, OutMsg);

          memset(mask, 0, sizeof(mask));
          for ( i=0, k=0; i<4; i++)
            for ( j=0; (j<8)&&(k<slider); j++, k++ ) mask[i] |= ('\x80'>>j);

          sprintf(OutMsg, "%d.%d.%d.%d", mask[0], mask[1], mask[2], mask[3]);
          WinSetDlgItemText(hwndDlg, TXT_M, OutMsg);

          subnetbit = slider-masklen;
          sprintf(OutMsg, "%d", subnetbit);
          WinSetDlgItemText(hwndDlg, TXT_SB, OutMsg);
          hostbit = 32-masklen-subnetbit;
          sprintf(OutMsg, "%d", hostbit);
          WinSetDlgItemText(hwndDlg, TXT_HB, OutMsg);

          if ( subnetbit != 0 ) numsubnet = (1L<<subnetbit)-2;
          else numsubnet = 0;
          sprintf(OutMsg, "%d", numsubnet);
          WinSetDlgItemText(hwndDlg, TXT_NS, OutMsg);
          numhost = (1L<<hostbit)-2;
          sprintf(OutMsg, "%d", numhost);
          WinSetDlgItemText(hwndDlg, TXT_NH, OutMsg);
          if ( subnetbit != 0 ) numtotal = numsubnet*numhost;
          else numtotal = numhost;
          sprintf(OutMsg, "%d", numtotal);
          WinSetDlgItemText(hwndDlg, TXT_T, OutMsg);

          for (i=0; i<4; i++) currnet[i] = addr[i] & mask[i];
          sprintf(OutMsg, "%d.%d.%d.%d",
                  currnet[0], currnet[1], currnet[2], currnet[3]);
          WinSetDlgItemText(hwndDlg, TXT_CN, OutMsg);

          for (i=0; i<4; i++) broadcast[i] = currnet[i] | (~mask[i]);
          sprintf(OutMsg, "%d.%d.%d.%d",
                  broadcast[0], broadcast[1], broadcast[2], broadcast[3]);
          WinSetDlgItemText(hwndDlg, TXT_CB, OutMsg);

          for (i=0; i<4; i++)
            {
            netstart[i] = currnet[i];
            netstop[i] = broadcast[i];
            }
          netstart[3]++;
          netstop[3]-=1;
          sprintf(OutMsg, "%d.%d.%d.%d-%d.%d.%d.%d",
                  netstart[0], netstart[1], netstart[2], netstart[3],
                  netstop[0],  netstop[1],  netstop[2],  netstop[3]);
          WinSetDlgItemText(hwndDlg, TXT_CHR, OutMsg);

          return (0);
          }
//-----------------------------------------------------------------------------
// Расскажем о себе
//-----------------------------------------------------------------------------
        case PB_ABOUT:
          {
          WinDlgBox( HWND_DESKTOP,
                     hwndDlg,
                     WinDefDlgProc,
                     NULLHANDLE,
                     200,
                     0 );
          return (0);
          }
        }