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); }
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); } }