497 lines
16 KiB
C
497 lines
16 KiB
C
|
/*===========================================================================*/
|
||
|
/* Copyright (c) 1987 - 1988, Future Soft Engineering, Inc. */
|
||
|
/* Houston, Texas */
|
||
|
/*===========================================================================*/
|
||
|
|
||
|
#define NOGDICAPMASKS TRUE
|
||
|
#define NOVIRTUALKEYCODES TRUE
|
||
|
#define NOICONS TRUE
|
||
|
#define NOKEYSTATES TRUE
|
||
|
#define NOSYSCOMMANDS TRUE
|
||
|
#define NOATOM TRUE
|
||
|
#define NODRAWTEXT TRUE
|
||
|
#define NOMINMAX TRUE
|
||
|
#define NOOPENFILE TRUE
|
||
|
#define NOSCROLL TRUE
|
||
|
#define NOPROFILER TRUE
|
||
|
#define NODEFERWINDOWPOS TRUE
|
||
|
#define NOPEN TRUE
|
||
|
#define NO_TASK_DEFINES TRUE
|
||
|
#define NOLSTRING TRUE
|
||
|
#define WIN31
|
||
|
|
||
|
#include <stdarg.h>
|
||
|
#include <windows.h>
|
||
|
#include <shellapi.h>
|
||
|
#include "port1632.h"
|
||
|
#include "dcrc.h"
|
||
|
#include "dynacomm.h"
|
||
|
#include "task.h"
|
||
|
#include "printfil.h"
|
||
|
#include <commdlg.h>
|
||
|
#include <cderr.h>
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* enableMenuList() - [mbb] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID enableMenuList(HMENU hAppMenu,BOOL bEnable, ...)
|
||
|
{
|
||
|
va_list ap;
|
||
|
INT ndx;
|
||
|
UINT miList;
|
||
|
HMENU hSubMenu;
|
||
|
|
||
|
va_start(ap,bEnable);
|
||
|
for(miList = va_arg(ap,UINT); miList; miList = va_arg(ap,UINT))
|
||
|
{
|
||
|
if(miList & 0x8000)
|
||
|
{
|
||
|
miList &= 0x000F;
|
||
|
if(childZoomStatus(0x0001, 0))
|
||
|
miList += 1;
|
||
|
hSubMenu = GetSubMenu(hAppMenu, miList);
|
||
|
for(ndx = GetMenuItemCount(hSubMenu)-1; ndx >= 0; ndx -= 1)
|
||
|
EnableMenuItem(hSubMenu, ndx, (bEnable ? MF_ENABLED : MF_GRAYED) | MF_BYPOSITION);
|
||
|
}
|
||
|
else
|
||
|
EnableMenuItem(hAppMenu, miList, bEnable ? MF_ENABLED : MF_GRAYED);
|
||
|
}
|
||
|
va_end(ap);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* initMenuPopup() - [mbb] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID initMenuPopup(WORD menuIndex)
|
||
|
{
|
||
|
HMENU hAppMenu;
|
||
|
WORD systemIndex;
|
||
|
|
||
|
if(childZoomStatus(0x0001, 0))
|
||
|
menuIndex -= 1;
|
||
|
|
||
|
hAppMenu = hMenu;
|
||
|
systemIndex = menuIndex;
|
||
|
switch(menuIndex)
|
||
|
{
|
||
|
case FILEMENU:
|
||
|
enableMenuList(hAppMenu, countChildWindows(FALSE), FMCLOSE, FMSAVE, FMSAVEAS, NULL);
|
||
|
enableMenuList(hAppMenu, TRUE, FMPRINT, FMPRINTSETUP, NULL);
|
||
|
enableMenuList(hAppMenu, (hPrintFile==NULL), FMPRINTSETUP, FMPRINTSETUP, NULL); /* jtf 3.20 check to see if chanel open */
|
||
|
break;
|
||
|
|
||
|
case EDITMENU:
|
||
|
if(GetTopWindow(hItWnd) == hTermWnd)
|
||
|
{
|
||
|
enableMenuList(hAppMenu, TRUE, EMSELECTALL, EMCLEAR, NULL);
|
||
|
enableMenuList(hAppMenu, (hTE.selStart != hTE.selEnd), EMCOPY, EMCOPYTHENPASTE, EMCOPYSPECIAL, NULL);
|
||
|
|
||
|
enableMenuList(hAppMenu, IsClipboardFormatAvailable(CF_TEXT), EMPASTE, NULL);
|
||
|
|
||
|
if (scrapSeq || ((xferFlag != XFRNONE) && (xferFlag != XFRRCV)) ) /* jtf 3.17 disable send if in transfer */
|
||
|
{
|
||
|
enableMenuList(hAppMenu, FALSE, EMCOPYTHENPASTE, NULL);
|
||
|
enableMenuList(hAppMenu, FALSE, EMPASTE, NULL);
|
||
|
enableMenuList(hAppMenu, FALSE, EMSELECTALL, NULL);
|
||
|
enableMenuList(hAppMenu, FALSE, EMCOPY, NULL);
|
||
|
}
|
||
|
|
||
|
enableMenuList(hAppMenu, (curTopLine >= savTopLine), EMSAVESCREEN, NULL);
|
||
|
}
|
||
|
else
|
||
|
enableMenuList(hAppMenu, FALSE, 0x8000 | systemIndex, NULL);
|
||
|
break;
|
||
|
|
||
|
case SETTINGSMENU:
|
||
|
enableMenuList(hAppMenu, activTerm, SMPHONE, SMEMULATE, SMTERMINAL, SMFUNCTIONKEYS, SMMODEM, NULL);
|
||
|
enableMenuList(hAppMenu, activTerm && (xferFlag == XFRNONE), SMTEXTXFERS, SMBINXFERS, SMCOMMUNICATIONS, NULL);
|
||
|
break;
|
||
|
|
||
|
case PHONEMENU: /* mbbx 2.00: network... */
|
||
|
if((trmParams.comDevRef > ITMNOCOM) && (xferFlag == XFRNONE)) /* mbbx 1.10: carrier... */
|
||
|
{
|
||
|
enableMenuList(hAppMenu, TRUE, 0x8000 | systemIndex, NULL);
|
||
|
enableMenuList(hAppMenu, !mdmOnLine, PMDIAL, NULL);
|
||
|
}
|
||
|
else
|
||
|
enableMenuList(hAppMenu, FALSE, 0x8000 | systemIndex, NULL);
|
||
|
break;
|
||
|
|
||
|
case TRANSFERMENU:
|
||
|
/* mbbx 1.10: answerMode... */
|
||
|
enableMenuList(hAppMenu, (trmParams.comDevRef > ITMNOCOM) && (xferFlag == XFRNONE), /* mbbx 2.00: network... */
|
||
|
TMSENDTEXTFILE, TMRCVTEXTFILE, NULL);
|
||
|
enableMenuList(hAppMenu, (trmParams.comDevRef > ITMNOCOM) && (xferFlag == XFRNONE) && !answerMode,
|
||
|
TMSENDBINFILE, TMRCVBINFILE, NULL);
|
||
|
enableMenuList(hAppMenu, activTerm && (xferFlag == XFRNONE), TMVIEWTEXTFILE, NULL);
|
||
|
enableMenuList(hAppMenu, (xferFlag > XFRNONE) && (xferFlag < XFRBSND) && !xferPaused, TMPAUSE, NULL);
|
||
|
enableMenuList(hAppMenu, (xferFlag > XFRNONE) && (xferFlag < XFRBSND) && xferPaused, TMRESUME, NULL);
|
||
|
enableMenuList(hAppMenu, (xferFlag > XFRNONE), TMSTOP, NULL);
|
||
|
|
||
|
if (scrapSeq) /* jtf gold 045 */
|
||
|
enableMenuList(hAppMenu, FALSE, TMSENDTEXTFILE, TMVIEWTEXTFILE, NULL); /* jtf 3.27 */
|
||
|
|
||
|
|
||
|
break;
|
||
|
|
||
|
case HELPMENU: /* mbbx 2.00: CUA... */
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* doEditMenu() - Edit memu commands happen here ! [scf] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID doEditMenu(INT theItem)
|
||
|
{
|
||
|
DWORD scrapSize;
|
||
|
HANDLE hText;
|
||
|
HANDLE tmpScrapHandle;
|
||
|
|
||
|
// -sdj unreferenced local var HDC theDC,newDC;
|
||
|
// -sdj unreferenced local varRECT theClient;
|
||
|
// -sdj unreferenced local varHANDLE newHdl;
|
||
|
|
||
|
if(GetTopWindow(hItWnd) == hTermWnd)
|
||
|
{
|
||
|
hText = hTE.hText;
|
||
|
|
||
|
switch(theItem)
|
||
|
{
|
||
|
case EMSELECTALL:
|
||
|
termSetSelect(0l, (LONG) (savTopLine + maxScreenLine + 1) * (maxChars + 2));
|
||
|
activSelect = TRUE; /* jtf 3.30 */
|
||
|
noSelect = FALSE; /* rjs bugs 020 */
|
||
|
break;
|
||
|
|
||
|
case EMCOPY:
|
||
|
case EMPASTE:
|
||
|
case EMCOPYTABLE:
|
||
|
case EMCOPYTHENPASTE:
|
||
|
if((theItem == EMCOPY) || (theItem == EMCOPYTABLE) || (theItem == EMCOPYTHENPASTE))
|
||
|
{
|
||
|
copiedTable = FALSE;
|
||
|
scrapSize = hTE.selEnd - hTE.selStart;
|
||
|
if (scrapSize == 0)
|
||
|
break; /* jtf 3.20 do not copy blank selection */
|
||
|
/* the + 3 for possible <cr>,<lf>, NULL */
|
||
|
if((tEScrapHandle = GlobalAlloc (GMEM_MOVEABLE | GMEM_ZEROINIT, scrapSize + 3)) != NULL)
|
||
|
{
|
||
|
blockMove((LPBYTE) GlobalLock(hText) + hTE.selStart,
|
||
|
(LPBYTE) GlobalLock(tEScrapHandle), scrapSize);
|
||
|
GlobalUnlock(hText);
|
||
|
GlobalUnlock(tEScrapHandle);
|
||
|
|
||
|
stripBlanks(GlobalLock(tEScrapHandle), &scrapSize);
|
||
|
GlobalUnlock(tEScrapHandle);
|
||
|
|
||
|
if((tEScrapHandle = GlobalReAlloc(tEScrapHandle, scrapSize+1, GMEM_MOVEABLE | GMEM_ZEROINIT)) != NULL)
|
||
|
if(OpenClipboard(hTermWnd))
|
||
|
{
|
||
|
EmptyClipboard();
|
||
|
SetClipboardData(CF_TEXT, tEScrapHandle);
|
||
|
CloseClipboard();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if((theItem == EMPASTE) || (theItem == EMCOPYTHENPASTE))
|
||
|
if (IsClipboardFormatAvailable(CF_TEXT)) /* jtf 3.20 prevent protect violation */
|
||
|
if(OpenClipboard(hTermWnd))
|
||
|
{
|
||
|
if((tmpScrapHandle = GetClipboardData(CF_TEXT)) != NULL)
|
||
|
{
|
||
|
scrapSize = (DWORD) lstrlen(GlobalLock(tmpScrapHandle));
|
||
|
GlobalUnlock(tmpScrapHandle);
|
||
|
if((tEScrapHandle = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, scrapSize+1)) != NULL)
|
||
|
{
|
||
|
blockMove(GlobalLock(tmpScrapHandle), GlobalLock(tEScrapHandle), scrapSize);
|
||
|
GlobalUnlock(tmpScrapHandle);
|
||
|
GlobalUnlock(tEScrapHandle);
|
||
|
}
|
||
|
}
|
||
|
CloseClipboard();
|
||
|
useScrap = TRUE;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case EMCLEAR:
|
||
|
cursorAdjust();
|
||
|
clearBuffer();
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* doCommand() - [mbb] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID doCommand(HWND hWnd, WPARAM wParam, LONG lParam)
|
||
|
{
|
||
|
|
||
|
/* this is called from within WM_COMMAND, so that wParam and lParam change as per*/
|
||
|
/* win32. This is also called from another place with lParm set to zero */
|
||
|
/* I'll fix the wParam references, and debug to see if any other fixes needed*/
|
||
|
|
||
|
CHAR work[STR255];
|
||
|
CHAR extrainfo[STR255]; // -sdj another buff to hold EXTRAINFO string of aboutbox;
|
||
|
BOOL result;
|
||
|
// -sdj unreferenced local var LPSTR lpEOS;
|
||
|
INT rc;
|
||
|
PRINTDLG PRN;
|
||
|
|
||
|
offCursor();
|
||
|
|
||
|
switch(GET_WM_COMMAND_ID(wParam, lParam))
|
||
|
{
|
||
|
case FMNEW:
|
||
|
doFileNew();
|
||
|
break;
|
||
|
|
||
|
case FMOPEN:
|
||
|
doFileOpen();
|
||
|
break;
|
||
|
|
||
|
case FMCLOSE:
|
||
|
doFileClose();
|
||
|
break;
|
||
|
|
||
|
case FMSAVE:
|
||
|
doFileSave();
|
||
|
break;
|
||
|
|
||
|
case FMSAVEAS:
|
||
|
doFileSaveAs();
|
||
|
break;
|
||
|
|
||
|
case FMPRINTSETUP:
|
||
|
/* initialize PRINTDLG structure */
|
||
|
PRN.lStructSize = sizeof(PRINTDLG);
|
||
|
PRN.hDevMode = hDevMode;
|
||
|
PRN.hDevNames = hDevNames;
|
||
|
PRN.Flags = PD_PRINTSETUP;
|
||
|
PRN.hwndOwner = hWnd;
|
||
|
|
||
|
PrintDlg(&PRN);
|
||
|
rc = CommDlgExtendedError();
|
||
|
/* Probable cause is low memory. */
|
||
|
if(rc == CDERR_DIALOGFAILURE || rc == CDERR_INITIALIZATION ||
|
||
|
rc == CDERR_LOADSTRFAILURE || rc == CDERR_LOADRESFAILURE ||
|
||
|
rc == PDERR_LOADDRVFAILURE || rc == PDERR_GETDEVMODEFAIL)
|
||
|
{
|
||
|
testBox(hWnd,-(MB_ICONHAND|MB_SYSTEMMODAL|MB_OK),STR_ERRCAPTION,NoMemStr);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
hDevMode = PRN.hDevMode;
|
||
|
hDevNames= PRN.hDevNames;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case FMPRINTER:
|
||
|
PrintFileComm(!prtFlag); /* mbbx 1.03: prAction(!prtFlag); */
|
||
|
break;
|
||
|
|
||
|
case FMTIMER:
|
||
|
timerToggle(TRUE); /* mbbx 1.03 */
|
||
|
break;
|
||
|
|
||
|
case FMEXIT: /* mbbx 1.10: CUA... */
|
||
|
CommThreadExit = TRUE; // we are exiting, so let the thread
|
||
|
// exit on its own by ExitThread.
|
||
|
|
||
|
PostMessage(hItWnd, WM_CLOSE, 0, 0L);
|
||
|
break;
|
||
|
|
||
|
case EMUNDO:
|
||
|
case EMSELECTALL:
|
||
|
case EMCUT:
|
||
|
case EMCOPY:
|
||
|
case EMPASTE:
|
||
|
case EMCLEAR:
|
||
|
case EMCOPYTHENPASTE:
|
||
|
doEditMenu(GET_WM_COMMAND_ID(wParam, lParam));
|
||
|
break;
|
||
|
|
||
|
case SMPHONE: /* mbbx 1.04 ... */
|
||
|
doSettings(IDDBPHON, dbPhon);
|
||
|
break;
|
||
|
|
||
|
case SMEMULATE:
|
||
|
doSettings(IDDBEMUL, dbEmul);
|
||
|
break;
|
||
|
|
||
|
case SMTERMINAL:
|
||
|
doSettings(IDDBTERM, dbTerm);
|
||
|
break;
|
||
|
|
||
|
case SMFUNCTIONKEYS:
|
||
|
doSettings(IDDBFKEY, dbFkey);
|
||
|
break;
|
||
|
|
||
|
case SMTEXTXFERS:
|
||
|
doSettings(IDDBTXTX, dbTxtX);
|
||
|
break;
|
||
|
|
||
|
case SMBINXFERS:
|
||
|
doSettings(IDDBBINX, dbBinX);
|
||
|
break;
|
||
|
|
||
|
case SMCOMMUNICATIONS:
|
||
|
doSettings(IDDBCOMM, dbComm);
|
||
|
break;
|
||
|
|
||
|
case SMMODEM: /* mbbx 1.10: CUA... */
|
||
|
doSettings(IDDBMODEM, dbModem);
|
||
|
break;
|
||
|
|
||
|
case PMDIAL:
|
||
|
dialPhone();
|
||
|
break;
|
||
|
|
||
|
case PMHANGUP:
|
||
|
hangUpPhone();
|
||
|
break;
|
||
|
|
||
|
case TMSENDTEXTFILE:
|
||
|
DEBOUT("doCommand: Got %s menu click\n","SENDTEXTFILE");
|
||
|
*taskState.string = 0; /* mbbx 1.01... */
|
||
|
sndTFile();
|
||
|
break;
|
||
|
|
||
|
case TMRCVTEXTFILE:
|
||
|
DEBOUT("doCommand: Got %s menu click\n","RCVTEXTFILE");
|
||
|
*taskState.string = 0; /* mbbx 1.01... */
|
||
|
rcvTFile();
|
||
|
break;
|
||
|
|
||
|
case TMVIEWTEXTFILE:
|
||
|
DEBOUT("doCommand: Got %s menu click\n","VIEWTEXTFILE");
|
||
|
*taskState.string = 0; /* mbbx 1.01... */
|
||
|
typTFile();
|
||
|
break;
|
||
|
|
||
|
case TMSENDBINFILE:
|
||
|
DEBOUT("doCommand: Got %s menu click\n","SENDBINFILE");
|
||
|
*taskState.string = 0; /* mbbx 1.01... */
|
||
|
sndBFile();
|
||
|
break;
|
||
|
|
||
|
case TMRCVBINFILE:
|
||
|
DEBOUT("doCommand: Got %s menu click\n","RCVBINFILE");
|
||
|
*taskState.string = 0; /* mbbx 1.01... */
|
||
|
rcvBFile();
|
||
|
break;
|
||
|
|
||
|
case TMPAUSE: /* mbbx 2.00: xfer ctrls... */
|
||
|
xferPauseResume(TRUE, FALSE);
|
||
|
break;
|
||
|
|
||
|
case TMRESUME:
|
||
|
xferPauseResume(FALSE, TRUE);
|
||
|
break;
|
||
|
|
||
|
case TMSTOP:
|
||
|
xferStopBreak(TRUE);
|
||
|
break;
|
||
|
|
||
|
case WMFKEYS:
|
||
|
showHidedbmyControls(!fKeysShown, TRUE); /* mbbx 2.00: bArrange... */
|
||
|
break;
|
||
|
|
||
|
case HMCOMMANDS:
|
||
|
case HMPROCEDURES:
|
||
|
case HMKEYBOARD:
|
||
|
LoadString(hInst, STR_HELPFILE, work, STR255-1);
|
||
|
result = WinHelp(hTermWnd, work, HELP_CONTEXT, wParam);
|
||
|
if(!result)
|
||
|
testBox(hTermWnd,-(MB_ICONHAND|MB_SYSTEMMODAL|MB_OK),STR_ERRCAPTION,NoMemStr);
|
||
|
break;
|
||
|
|
||
|
case HMINDEX: /* mbbx 2.00: CUA... */
|
||
|
LoadString(hInst, STR_HELPFILE, work, STR255-1);
|
||
|
result = WinHelp(hTermWnd,work,HELP_INDEX,0L);
|
||
|
if(!result)
|
||
|
testBox(hTermWnd,-(MB_ICONHAND|MB_SYSTEMMODAL|MB_OK),STR_ERRCAPTION,NoMemStr);
|
||
|
break;
|
||
|
|
||
|
case HMHELP:
|
||
|
result = WinHelp(hTermWnd,NULL,HELP_HELPONHELP,0L);
|
||
|
if(!result)
|
||
|
testBox(hTermWnd,-(MB_ICONHAND|MB_SYSTEMMODAL|MB_OK),STR_ERRCAPTION,NoMemStr);
|
||
|
break;
|
||
|
|
||
|
case HMSEARCH:
|
||
|
LoadString(hInst, STR_HELPFILE, work, STR255-1);
|
||
|
if(!WinHelp(hTermWnd, work, HELP_PARTIALKEY, (DWORD_PTR)""))
|
||
|
testBox(hTermWnd,-(MB_ICONHAND|MB_SYSTEMMODAL|MB_OK),STR_ERRCAPTION,NoMemStr);
|
||
|
break;
|
||
|
|
||
|
// case HMABOUT:
|
||
|
// DialogBox(hInst, MAKEINTRESOURCE(IDDBABOUT), hItWnd, dbAbout);
|
||
|
// break;
|
||
|
// lets try to close one bugreport, by using shellabout again so that
|
||
|
// the about box is consistent with the other shell applets and win31
|
||
|
// -sdj 12/15/92
|
||
|
|
||
|
case HMABOUT:
|
||
|
LoadString(hInst, STR_APPNAME, work, STR255-1);
|
||
|
LoadString(hInst, STR_EXTRAINFO, extrainfo, STR255-1);
|
||
|
|
||
|
ShellAbout(hTermWnd, work, extrainfo,
|
||
|
LoadIcon(hInst, MAKEINTRESOURCE(ICO_DYNACOMM)));
|
||
|
break;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
default:
|
||
|
DEBOUT("doCommand: %s\n","Got INTO default option");
|
||
|
switch(GET_WM_COMMAND_ID(wParam, lParam) & 0xF000)
|
||
|
{
|
||
|
case 0xF000:
|
||
|
/* NOTE under lParam may be zero and screw up under win32, since lParam*/
|
||
|
/* is passed in sometimes == zero by another function*/
|
||
|
|
||
|
DEBOUT("doCommand: %s\n","Got into default option: doing SendMsg");
|
||
|
SendMessage(GetTopWindow(hItWnd), WM_SYSCOMMAND, wParam, lParam);
|
||
|
DEBOUT("doCommand: %s\n","Got into default option: done SendMsg");
|
||
|
break;
|
||
|
}
|
||
|
DEBOUT("doCommand: %s\n","Got OUT of default option");
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
DEBOUT("doCommand: %s\n","Doing UpdateWindow(hItWnd)");
|
||
|
UpdateWindow(hItWnd);
|
||
|
DEBOUT("doCommand: %s\n","Done UpdateWindow(hItWnd)");
|
||
|
onCursor();
|
||
|
}
|
||
|
|
||
|
INT_PTR CALLBACK dbAbout(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
switch (message)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
return TRUE;
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
if (wParam == IDOK)
|
||
|
EndDialog(hDlg, GET_WM_COMMAND_ID(wParam, lParam));
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|