/* File: C:\WACKER\XFER\x_zm_dlg.c (Created: 17-Dec-1993) * created from: * File: C:\HA5G\ha5g\genrcdlg.c (Created: 12-Sep-1990) * * Copyright 1990,1994 by Hilgraeve Inc. -- Monroe, MI * All rights reserved * * $Revision: 3 $ * $Date: 5/15/02 4:40p $ */ #include #pragma hdrstop #include #include #include #include #include #include "xfer.h" #include "xfer.hh" #if !defined(DlgParseCmd) #define DlgParseCmd(i,n,c,w,l) i=LOWORD(w);n=HIWORD(w);c=(HWND)l; #endif struct stSaveDlgStuff { LPARAM lPar; HWND hwndWaitUpDown; }; typedef struct stSaveDlgStuff SDS; /* These are the control ID numbers */ #define AUTOSTART_CHECK 102 #define USE_SENDER_PB 104 #define USE_LOCAL_PB 105 #define REC_NEGOTIATE_PB 107 #define REC_NEVER_PB 108 #define REC_ALWAYS_PB 109 #define AO_COMBO 112 #define SEND_NEGOTIATE_PB 114 #define SEND_ONE_TIME_PB 115 #define SEND_ALWAYS_PB 116 #define STREAMING_PB 119 #define WINDOWED_PB 120 #define WINDOW_COMBO 121 #define PACKET_COMBO 124 #define WAIT_ROCKER 130 #define ROCKER_ID 131 #define WMAX 100 #define BIT_16_PB 127 #define BIT_32_PB 128 #define EOL_PB 132 #define ESC_CODE_PB 133 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * ZmodemParamsDlg * * DESCRIPTION: * This function is called to allow the user to modify the ZMODEM transfer * protocol parameters. * * ARGUMENTS: Standard Windows dialog manager * * RETURNS: Standard Windows dialog manager * */ BOOL CALLBACK ZmodemParamsDlg(HWND hDlg, UINT wMsg, WPARAM wPar, LPARAM lPar) { #if defined(UPPER_FEATURES) HWND hwndChild; INT nId; INT nNtfy; int nLoop; RECT rc; DWORD dw; SDS *pD; XFR_Z_PARAMS *pZ; switch (wMsg) { case WM_INITDIALOG: /* Save the parameter block for the exit path */ pD = (SDS *)malloc(sizeof(SDS)); if (pD == (SDS *)0) { /* Error, bail out, pull rip cord */ /* TODO: decide if we need an error message */ EndDialog(hDlg, FALSE); } pD->lPar = lPar; SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pD); /* Get the parameter block to use now*/ pZ = (XFR_Z_PARAMS *)lPar; /* * Do the receiving stuff */ SendMessage(GetDlgItem(hDlg, AUTOSTART_CHECK), BM_SETCHECK, pZ->nAutostartOK, 0L); if (pZ->nFileExists == ZP_FE_SENDER) SendMessage(GetDlgItem(hDlg, USE_SENDER_PB), BM_SETCHECK, 1, 0L); else SendMessage(GetDlgItem(hDlg, USE_LOCAL_PB), BM_SETCHECK, 1, 0L); switch (pZ->nCrashRecRecv) { default: case ZP_CRR_NEG: SendMessage(GetDlgItem(hDlg, REC_NEGOTIATE_PB), BM_SETCHECK, 1, 0L); break; case ZP_CRR_NEVER: SendMessage(GetDlgItem(hDlg, REC_NEVER_PB), BM_SETCHECK, 1, 0L); break; case ZP_CRR_ALWAYS: SendMessage(GetDlgItem(hDlg, REC_ALWAYS_PB), BM_SETCHECK, 1, 0L); break; } /* * Do the sending stuff */ for (nLoop = 0; nLoop < 8; nLoop += 1) { TCHAR acStr[64]; LoadString(glblQueryDllHinst(), IDS_TM_SD_ONE + nLoop, acStr, sizeof(acStr) / sizeof(TCHAR)); SendMessage(GetDlgItem(hDlg, AO_COMBO), CB_INSERTSTRING, (UINT)nLoop, (LONG)acStr); } SendMessage(GetDlgItem(hDlg, AO_COMBO), CB_SETCURSEL, pZ->nOverwriteOpt - 1, 0L); if (pZ->nCrashRecSend == ZP_CRS_NEG) SendMessage(GetDlgItem(hDlg, SEND_NEGOTIATE_PB), BM_SETCHECK, 1, 0L); else SendMessage(GetDlgItem(hDlg, SEND_ALWAYS_PB), BM_SETCHECK, 1, 0L); /* * Do the generic stuff */ for (nLoop = 0; nLoop < 16; nLoop += 1) { BYTE acBuffer[16]; wsprintf(acBuffer, (LPSTR)"%d K", nLoop + 1); SendMessage(GetDlgItem(hDlg, WINDOW_COMBO), CB_INSERTSTRING, (UINT)nLoop, (LONG)((LPSTR)acBuffer)); } SendMessage(GetDlgItem(hDlg, WINDOW_COMBO), CB_SETCURSEL, pZ->nWinSize, 0L); if (pZ->nXferMthd == ZP_XM_STREAM) { SendMessage(GetDlgItem(hDlg, STREAMING_PB), BM_SETCHECK, 1, 0L); EnableWindow(GetDlgItem(hDlg, WINDOW_COMBO), FALSE); } else { SendMessage(GetDlgItem(hDlg, WINDOWED_PB), BM_SETCHECK, 1, 0L); } for (nLoop = 0; nLoop < 6; nLoop += 1) { BYTE acBuffer[16]; wsprintf(acBuffer, (LPSTR)"%d", (1 << (nLoop + 5))); SendMessage(GetDlgItem(hDlg, PACKET_COMBO), CB_INSERTSTRING, (UINT)nLoop, (LONG)((LPSTR)acBuffer)); } SendMessage(GetDlgItem(hDlg, PACKET_COMBO), CB_SETCURSEL, pZ->nBlkSize, 0L); // SetDlgItemInt(hDlg, WAIT_ROCKER, pZ->nRetryWait, FALSE); GetClientRect(GetDlgItem(hDlg, WAIT_ROCKER), &rc); nLoop = rc.top - rc.bottom; dw = WS_CHILD | WS_BORDER | WS_VISIBLE; dw |= UDS_ALIGNRIGHT; dw |= UDS_ARROWKEYS; dw |= UDS_SETBUDDYINT; pD->hwndWaitUpDown = CreateUpDownControl( dw, /* create window flags */ rc.right, /* left edge */ rc.top, /* top edge */ (nLoop / 3) * 2,/* width */ nLoop, /* height */ hDlg, /* parent window */ ROCKER_ID, (HINSTANCE)GetWindowLongPtr(hDlg, GWLP_HINSTANCE), GetDlgItem(hDlg, WAIT_ROCKER), WMAX, /* upper limit */ 1, /* lower limit */ pZ->nRetryWait);/* starting position */ assert(pD->hwndWaitUpDown); #if 0 /* Do we still use rockers ? */ SendMessage(GetDlgItem(hDlg, WAIT_ROCKER), RS_SETMIN, 0, (LONG)1); SendMessage(GetDlgItem(hDlg, WAIT_ROCKER), RS_SETMAX, 0, (LONG)WMAX); SendMessage(GetDlgItem(hDlg, WAIT_ROCKER), RS_SETVALUE, 0, (LONG)wFlag); #endif if (pZ->nCrcType == ZP_CRC_32) SendMessage(GetDlgItem(hDlg, BIT_32_PB), BM_SETCHECK, 1, 0L); else SendMessage(GetDlgItem(hDlg, BIT_16_PB), BM_SETCHECK, 1, 0L); if (pZ->nEolConvert) SendMessage(GetDlgItem(hDlg, EOL_PB), BM_SETCHECK, 1, 0L); if (pZ->nEscCtrlCodes) SendMessage(GetDlgItem(hDlg, ESC_CODE_PB), BM_SETCHECK, 1, 0L); break; case WM_DESTROY: break; case WM_COMMAND: /* * Did we plan to put a macro in here to do the parsing ? */ DlgParseCmd(nId, nNtfy, hwndChild, wPar, lPar); switch (nId) { case IDOK: pD = (SDS *)GetWindowLongPtr(hDlg, DWLP_USER); assert(pD); pZ = (XFR_Z_PARAMS *)pD->lPar; assert(pZ); /* * TODO: decide how we are going to handle confirmable changes */ /* * Do the receive stuff */ pZ->nAutostartOK = (IsDlgButtonChecked(hDlg, AUTOSTART_CHECK) == BST_CHECKED); pZ->nFileExists = ZP_FE_DLG; if (IsDlgButtonChecked(hDlg, USE_SENDER_PB) == BST_CHECKED) { pZ->nFileExists = ZP_FE_SENDER; } if (IsDlgButtonChecked(hDlg, REC_NEGOTIATE_PB) == BST_CHECKED) { pZ->nCrashRecRecv = ZP_CRR_NEG; } else if (IsDlgButtonChecked(hDlg, REC_NEVER_PB) == BST_CHECKED) { pZ->nCrashRecRecv = ZP_CRR_NEVER; } else { pZ->nCrashRecRecv = ZP_CRR_ALWAYS; } /* * Do the send stuff */ pZ->nOverwriteOpt = (LONG)SendMessage(GetDlgItem(hDlg, AO_COMBO), CB_GETCURSEL, 0, 0L); if (pZ->nOverwriteOpt == CB_ERR) { pZ->nOverwriteOpt = 1; } else { pZ->nOverwriteOpt += 1; /* Zero vs. one base list */ } pZ->nCrashRecSend = ZP_CRS_ALWAYS; if (IsDlgButtonChecked(hDlg, SEND_NEGOTIATE_PB) == BST_CHECKED) { pZ->nCrashRecSend = ZP_CRS_NEG; } else if (IsDlgButtonChecked(hDlg, SEND_ONE_TIME_PB) == BST_CHECKED) { pZ->nCrashRecSend = ZP_CRS_ONCE; } /* * Do the generic stuff */ pZ->nWinSize = (LONG)SendMessage(GetDlgItem(hDlg, WINDOW_COMBO), CB_GETCURSEL, 0, 0L); if (pZ->nWinSize == CB_ERR) { pZ->nWinSize = 1; /* TODO: check the format */ } if (IsDlgButtonChecked(hDlg, STREAMING_PB) == BST_CHECKED) { pZ->nXferMthd = ZP_XM_STREAM; } else { pZ->nXferMthd = ZP_XM_WINDOW; } pZ->nBlkSize = (LONG)SendMessage(GetDlgItem(hDlg, PACKET_COMBO), CB_GETCURSEL, 0, 0L); if (pZ->nBlkSize == CB_ERR) { /* TODO: check the format */ pZ->nBlkSize = 1; } if (IsDlgButtonChecked(hDlg, BIT_32_PB) == BST_CHECKED) { pZ->nCrcType = ZP_CRC_32; } else { pZ->nCrcType = ZP_CRC_16; } /* TODO: remember that this used to be a rocker */ pZ->nRetryWait = GetDlgItemInt(hDlg, WAIT_ROCKER, NULL, FALSE); if (pZ->nRetryWait < 5) pZ->nRetryWait = 5; if (pZ->nRetryWait > 100) pZ->nRetryWait = 100; pZ->nEolConvert = (IsDlgButtonChecked(hDlg, EOL_PB) == BST_CHECKED); pZ->nEscCtrlCodes = (IsDlgButtonChecked(hDlg, ESC_CODE_PB) == BST_CHECKED); free(pD); pD = (SDS *)0; EndDialog(hDlg, TRUE); break; case IDCANCEL: /* Not much to do except free the memory */ pD = (SDS *)GetWindowLongPtr(hDlg, DWLP_USER); free(pD); pD = (SDS *)0; EndDialog(hDlg, FALSE); break; case STREAMING_PB: if (IsDlgButtonChecked(hDlg, STREAMING_PB) == BST_CHECKED) { EnableWindow(GetDlgItem(hDlg, WINDOW_COMBO), FALSE); } break; case WINDOWED_PB: if (IsDlgButtonChecked(hDlg, WINDOWED_PB) == BST_CHECKED) { EnableWindow(GetDlgItem(hDlg, WINDOW_COMBO), TRUE); } break; default: return FALSE; } break; default: return FALSE; } #endif return TRUE; }