/*===========================================================================*/ /* 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 #include #include #include "port1632.h" #include "dcrc.h" #include "dynacomm.h" #include "task.h" #include "printfil.h" #include #include /*---------------------------------------------------------------------------*/ /* 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 ,, 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; }