/* File: D:\WACKER\tdll\sesshdl.c (Created: 01-Dec-1993) * * Copyright 1994 by Hilgraeve Inc. -- Monroe, MI * All rights reserved * * $Revision: 12 $ * $Date: 7/08/02 6:47p $ */ #include #pragma hdrstop #include #include "features.h" #include "stdtyp.h" #include "mc.h" #include "assert.h" #include "session.h" #include "session.hh" #include "sf.h" #include "backscrl.h" #include "globals.h" #include "xfer_msc.h" #include "file_msc.h" #include "print.h" #include "capture.h" #include "timers.h" #include "com.h" #include "cloop.h" #include "errorbox.h" #include "tdll.h" #include "htchar.h" #include #include #include "update.h" #include "cnct.h" #include "statusbr.h" #include "sess_ids.h" #include "misc.h" #include "translat.h" /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * CreateSessionHandle * * DESCRIPTION: * Creates a session handle. Note, hwndSession can be 0 if you need * to create a stand alone session handle. * * ARGUMENTS: * hwndSession - session window handle (can be 0) * * RETURNS: * Session handle or 0. * */ HSESSION CreateSessionHandle(const HWND hwndSession) { HHSESSION hhSess; hhSess = (HHSESSION)malloc(sizeof(*hhSess)); if (hhSess == 0) { assert(FALSE); return 0; } memset(hhSess, 0, sizeof(*hhSess)); hhSess->lPrefix = PRE_MAGIC; hhSess->lPostfix = POST_MAGIC; InitializeCriticalSection(&hhSess->csSess); InitializeCriticalSection(&hhSess->csTimerMux); hhSess->hwndSess = hwndSession; return (HSESSION)hhSess; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * InitializeSessionHandle * * DESCRIPTION: * Does all the dirty work of initilizing the session handle * * A special case for this code is when it gets called by the stuff in the * shell extensions for property sheets. This case can be recognised by the * fact that the session window handle is NULL, as is the pointer to the * CREATESTRUCT. * * ARGUMENTS: * hSession - session handle * hwnd - session window handle * *pcs - pointer to CREATESTRUCT, passed along from CreateWindowEx(). * * RETURNS: * BOOL * */ BOOL InitializeSessionHandle(const HSESSION hSession, const HWND hwnd, const CREATESTRUCT *pcs) { const HHSESSION hhSess = VerifySessionHandle(hSession); TCHAR ach[256], achTitle[100], achFormat[100]; /* --- Any session command data is saved for later --- */ if (pcs) { if (pcs->lpCreateParams) { // Make sure we don't overrun the buffer. REV: 11/10/2000 // StrCharCopyN(hhSess->achSessCmdLn, (TCHAR*)pcs->lpCreateParams, sizeof(hhSess->achSessCmdLn)/sizeof(TCHAR) - 1); // Make sure the array is NULL terminated. REV: 11/10/2000 // hhSess->achSessCmdLn[sizeof(hhSess->achSessCmdLn)/sizeof(TCHAR) - 1] = TEXT('\0'); } } /* --- Create multiplexed timer --- */ if (hwnd) { if (TimerMuxCreate(hwnd, 0, &hhSess->hTimerMux, hSession) != TIMER_OK) { assert(FALSE); return FALSE; } /* --- Create status window using a common control --- */ hhSess->hwndStatusbar = sbrCreateSessionStatusbar(hSession); if (!hhSess->hwndStatusbar) { assert(FALSE); return FALSE; } sessSetStatusbarVisible(hSession, TRUE); /* --- Create a session toolbar --- */ hhSess->hwndToolbar = CreateSessionToolbar(hSession, hwnd); if (!hhSess->hwndToolbar) { assert(FALSE); return FALSE; } sessSetToolbarVisible(hSession, TRUE); hhSess->hwndSidebar = CreateSidebar(hwnd, hSession); if (!hhSess->hwndSidebar) { assert(FALSE); return FALSE; } } /* --- Create a Backscroll handle --- */ hhSess->hBackscrl = backscrlCreate(hSession, 250*132); if (!hhSess->hBackscrl) { assert(FALSE); return FALSE; } /* --- Create an Update handle --- */ hhSess->hUpdate = updateCreate(hSession); if (!hhSess->hUpdate) { assert(FALSE); return FALSE; } /* -- Create a CLoop handle --- */ hhSess->hCLoop = CLoopCreateHandle(hSession); if (!hhSess->hCLoop) { assert(FALSE); return FALSE; } /* --- Create an Emulator handle --- */ hhSess->hEmu = emuCreateHdl(hSession); if (!hhSess->hEmu) { assert(FALSE); return FALSE; } /* --- Create a terminal window --- */ if (hwnd) { hhSess->hwndTerm = CreateTerminalWindow(hwnd); if (!hhSess->hwndTerm) { assert(FALSE); return FALSE; } } /* -- Create a Com handle --- */ if (ComCreateHandle(hSession, &hhSess->hCom) != COM_OK) { assert(FALSE); return FALSE; } /* --- Create a transfer handle --- */ if (hwnd) { hhSess->hXferHdl = CreateXferHdl(hSession); if (!hhSess->hXferHdl) { assert(FALSE); return FALSE; } /* --- Create a Files and Directorys handle --- */ hhSess->hFilesHdl = CreateFilesDirsHdl(hSession); if (!hhSess->hFilesHdl) { assert(FALSE); return FALSE; } } /* --- Create a session data file handle --- */ hhSess->hSysFile = CreateSysFileHdl(); if (hhSess->hSysFile == 0) { assert(FALSE); return FALSE; } /* --- Create a connection handle --- */ hhSess->hCnct = cnctCreateHdl(hSession); if (hhSess->hCnct == 0) { assert(FALSE); return FALSE; } /* --- Create a capture file handle --- */ hhSess->hCaptFile = CreateCaptureFileHandle(hSession); if (hhSess->hCaptFile == 0) { assert(FALSE); return FALSE; } /* --- Create a print handle --- */ hhSess->hPrint = printCreateHdl(hSession); if (hhSess->hPrint == 0) { assert(FALSE); return FALSE; } #if defined(CHARACTER_TRANSLATION) hhSess->hTranslate = CreateTranslateHandle(hSession); if (hhSess->hTranslate == NULL) { assert(FALSE); return FALSE; } #endif /* --- Initialize the error message timeout value --- */ hhSess->nTimeout = 0; /* -- Start the engine --- */ if (hwnd && hhSess->hCLoop) CLoopActivate(hhSess->hCLoop); // Set default sound setting... // hhSess->fSound = FALSE; // Set default exit setting... // hhSess->fExit = FALSE; // Set the 'Allow host initiated file transfers' feature // hhSess->fAllowHostXfers = FALSE; // Store some default values in the rcSess... // hhSess->rcSess.top = hhSess->rcSess.bottom = 0; hhSess->rcSess.right = hhSess->rcSess.left = 0; // Load program icon as session icon, load routine can overwrite this // to user defined icon. // sessInitializeIcons((HSESSION)hhSess); /* --- Process the command line stuff, if any --- */ // Is this a new connection... i.e., hasn't been saved before. // hhSess->fIsNewSession = FALSE; if (hwnd) { // if (StrCharGetStrLength(hhSess->achSessCmdLn) > 0) if (sessCheckAndLoadCmdLn(hSession) == 0) { if (sessLoadSessionStuff(hSession) == FALSE) { LoadString(glblQueryDllHinst(), IDS_ER_BAD_SESSION, achFormat, sizeof(achFormat)/sizeof(TCHAR)); // mrw:10/7/96 // wsprintf(ach, achFormat, ""); // get rid of %s LoadString(glblQueryDllHinst(), IDS_MB_TITLE_WARN, achTitle, sizeof(achTitle)/sizeof(TCHAR)); TimedMessageBox(hwnd, ach, achTitle, MB_OK | MB_ICONEXCLAMATION, hhSess->nTimeout); if (ReinitializeSessionHandle(hSession, TRUE) == FALSE) { LoadString(glblQueryDllHinst(), IDS_ER_REINIT, ach, sizeof(ach)/sizeof(TCHAR)); LoadString(glblQueryDllHinst(), IDS_MB_TITLE_ERR, achTitle, sizeof(achTitle)/sizeof(TCHAR)); TimedMessageBox(hwnd, ach, achTitle, MB_OK | MB_ICONSTOP, hhSess->nTimeout); PostQuitMessage(1); return FALSE; } } emuHomeHostCursor(hhSess->hEmu); emuEraseTerminalScreen(hhSess->hEmu); } if (hhSess->achSessName[0] == TEXT('\0')) { ach[0] = TEXT('\0'); LoadString(glblQueryDllHinst(), IDS_GNRL_NEW_CNCT, ach, sizeof(ach) / sizeof(TCHAR)); StrCharCopyN(hhSess->achSessName, ach, FNAME_LEN + 1); StrCharCopyN(hhSess->achOldSessName, ach, FNAME_LEN + 1); hhSess->fIsNewSession = TRUE; } sessUpdateAppTitle(hSession); PostMessage(hwnd, WM_SETICON, (WPARAM)TRUE, (LPARAM)hhSess->hIcon); /* --- Force status line to update --- */ SendMessage(hhSess->hwndStatusbar, SBR_NTFY_INITIALIZE, 0, 0); } return TRUE; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * ReinitializeSessionHandle * * DESCRIPTION: * Calls a bunch of functions to set the session handle back to a known, * blank state, without having to destroy it. * * ARGUMENTS: * hSession - external session handle. * fUpdateTitle- reset the app window title if this is TRUE * * RETURNS: */ BOOL ReinitializeSessionHandle(const HSESSION hSession, const int fUpdateTitle) { int iRet = 0; const HHSESSION hhSess = VerifySessionHandle(hSession); /* --- Reinitialize the X(trans)fer handle --- */ if (InitializeXferHdl(hSession, sessQueryXferHdl(hSession)) != 0) { assert(FALSE); return FALSE; } /* --- Reinitialize the Files and Directorys handle --- */ if (InitializeFilesDirsHdl(hSession, sessQueryFilesDirsHdl(hSession)) != 0) { assert(FALSE); return FALSE; } /* --- Reinitialize the Capture File handle --- */ if (InitializeCaptureFileHandle(hSession, sessQueryCaptureFileHdl(hSession)) != 0) { assert(FALSE); return FALSE; } /* --- Init the connection handle --- */ // NOTE: cnctInit() will return -4 if no modem has ever been installed // (lineInitialize() returns LINEERR_OPERATIONUNAVAIL) rev:08/05/99. // iRet = cnctInit(sessQueryCnctHdl(hSession)); if (iRet != 0 && iRet != -4) { assert(FALSE); return FALSE; } /* --- Init the com handle --- */ if (ComInitHdl(sessQueryComHdl(hSession)) != COM_OK) { assert(FALSE); return FALSE; } /* --- Create a session data file handle --- */ sfReleaseSessionFile(hhSess->hSysFile); hhSess->hSysFile = CreateSysFileHdl(); if (hhSess->hSysFile == 0) { assert(FALSE); return FALSE; } /* --- Init the cloop handle --- */ if (CLoopInitHdl(sessQueryCLoopHdl(hSession)) != 0) { assert(FALSE); return FALSE; } /* --- Reinitialize the Emulator handle --- */ if (emuInitializeHdl(sessQueryEmuHdl(hSession)) != 0) { assert(FALSE); return FALSE; } // Home the cursor (different than doing set_curpos(0,0) and // erase the terminal screen. // emuHomeHostCursor(hhSess->hEmu); emuEraseTerminalScreen(hhSess->hEmu); /* --- Reinitialize the Print handle --- */ if (printInitializeHdl(sessQueryPrintHdl(hSession)) != 0) { assert(FALSE); return FALSE; } #if defined(CHARACTER_TRANSLATION) if (InitTranslateHandle(sessQueryTranslateHdl(hSession), TRUE) != 0) { assert(FALSE); return FALSE; } #endif /* --- Re-Create a Backscroll handle --- */ // No backscrlInitialize() was written so for now do this... // backscrlFlush(hhSess->hBackscrl); /* --- Initialize the error message timeout value --- */ // hhSess->nTimeout = 30; // initialize to 30 seconds hhSess->nTimeout = 0; // disable in Lower Wacker // Set default sound setting... // hhSess->fSound = FALSE; // Set default exit setting... // hhSess->fExit = FALSE; // Set the 'Allow remote initiated file transfers' feature // hhSess->fAllowHostXfers = FALSE; // Load program icon as session icon, load routine can overwrite this // to user defined icon. // sessInitializeIcons((HSESSION)hhSess); // Zap the command line // TCHAR_Fill(hhSess->achSessCmdLn, TEXT('\0'), sizeof(hhSess->achSessCmdLn) / sizeof(TCHAR)); // Make this a new connection // hhSess->fIsNewSession = TRUE; TCHAR_Fill(hhSess->achSessName, TEXT('\0'), sizeof(hhSess->achSessName) / sizeof(TCHAR)); TCHAR_Fill(hhSess->achOldSessName, TEXT('\0'), sizeof(hhSess->achOldSessName) / sizeof(TCHAR)); LoadString(glblQueryDllHinst(), IDS_GNRL_NEW_CNCT, hhSess->achSessName, sizeof(hhSess->achSessName) / sizeof(TCHAR)); StrCharCopyN(hhSess->achOldSessName, hhSess->achSessName, FNAME_LEN + 1); // Update the title - mrw:6/16/95 // if (fUpdateTitle) sessUpdateAppTitle(hSession); /* --- Force status line to update --- */ PostMessage(hhSess->hwndStatusbar, SBR_NTFY_REFRESH, (WPARAM)SBR_MAX_PARTS, 0); // Refresh the terminal window - necessary - mrw:6/16/95 // SendMessage(hhSess->hwndTerm, WM_SIZE, 0, 0); return TRUE; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * DestroySessionHandle * * DESCRIPTION: * Destroys the session handle created by CreateSessionHandle. * * ARGUMENTS: * hSession - external session handle. * * RETURNS: * void * */ void DestroySessionHandle(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); if (hhSess == 0) return; if (hhSess->hCLoop) CLoopDestroyHandle(&hhSess->hCLoop); if (hhSess->hUpdate) { updateDestroy(hhSess->hUpdate); hhSess->hUpdate = NULL; // REV 8/27/98 } if (hhSess->hEmu) { emuDestroyHdl(hhSess->hEmu); hhSess->hEmu = NULL; } if (hhSess->hBackscrl) { backscrlDestroy(hhSess->hBackscrl); hhSess->hBackscrl = NULL; } if (hhSess->hXferHdl) { DestroyXferHdl((HXFER)hhSess->hXferHdl); hhSess->hXferHdl = NULL; // REV 8/27/98 } if (hhSess->hFilesHdl) { DestroyFilesDirsHdl(sessQueryFilesDirsHdl(hSession)); hhSess->hFilesHdl = NULL; // REV 8/27/98 } if (hhSess->hSysFile) { sfCloseSessionFile(hhSess->hSysFile); hhSess->hSysFile = 0; } if (hhSess->hCnct) { cnctDestroyHdl(hhSess->hCnct); hhSess->hCnct = NULL; } // ComDestroy must follow cnctDestroy since cnctDestroy does // a port deactivate. - mrw // if (hhSess->hCom) ComDestroyHandle(&hhSess->hCom); if (hhSess->hCaptFile) { DestroyCaptureFileHandle(hhSess->hCaptFile); hhSess->hCaptFile = NULL; } if (hhSess->hPrint) { printDestroyHdl(hhSess->hPrint); hhSess->hPrint = NULL; } #if defined(CHARACTER_TRANSLATION) if (hhSess->hTranslate) { DestroyTranslateHandle(hhSess->hTranslate); hhSess->hTranslate = NULL; } #endif // // Make sure to get rid of the TimerMux, otherwise // there is a memory leak. REV: 12/20/2000 // if (hhSess->hTimerMux) { TimerMuxDestroy(&hhSess->hTimerMux, hSession); hhSess->hTimerMux = NULL; } // // Set the handle to the statusbar to NULL so we don't // access the destroyed status bar. REV: 12/20/2000 // if (hhSess->hwndStatusbar) { hhSess->hwndStatusbar = NULL; } DeleteCriticalSection(&hhSess->csSess); DeleteCriticalSection(&hhSess->csTimerMux); free(hhSess); } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * VerifySessionHandle * * DESCRIPTION: * Every session function calls here to verify and get the internal handle. * Saves having to type this chunk of code and takes less space than * a macro. We may want to add further checks to verify the handle. * * * ARGUMENTS: * hSession - external session handle * fSynchronize - if TRUE, we wait for mutex * * RETURNS: * Internal session handle or zero. * */ HHSESSION VerifySessionHandle(const HSESSION hSession) { const HHSESSION hhSess = (HHSESSION)hSession; if (hSession == 0) { assert(FALSE); ExitProcess(1); } /* Above mentioned further checks, added by DLW */ assert(hhSess->lPrefix == PRE_MAGIC); assert(hhSess->lPostfix == POST_MAGIC); return hhSess; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * hLock * * DESCRIPTION: * Use the function to get ownership of the mutex semaphore for * synchronized access. * * ARGUMENTS: * hhSess - internal session handle. * * RETURNS: * void * */ void hLock(const HHSESSION hhSess) { if (hhSess == 0) { assert(FALSE); ExitProcess(1); } EnterCriticalSection(&hhSess->csSess); return; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * hUnlock * * DESCRIPTION: * Releases the mutex semaphore * * ARGUMENTS: * hhSess - internal session handle * * RETURNS: * void * */ void hUnlock(const HHSESSION hhSess) { if (hhSess == 0) { assert(FALSE); ExitProcess(1); } LeaveCriticalSection(&hhSess->csSess); return; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * hLockTimerMux * * DESCRIPTION: * Use the function to get ownership of the mutex semaphore for * synchronized access. * * ARGUMENTS: * hhSess - internal session handle. * * RETURNS: * void * */ static void hLockTimerMux(const HHSESSION hhSess) { if (hhSess == 0) { assert(FALSE); ExitProcess(1); } EnterCriticalSection(&hhSess->csTimerMux); return; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * hUnlockTimerMux * * DESCRIPTION: * Releases the mutex semaphore * * ARGUMENTS: * hhSess - internal session handle * * RETURNS: * void * */ static void hUnlockTimerMux(const HHSESSION hhSess) { if (hhSess == 0) { assert(FALSE); ExitProcess(1); } LeaveCriticalSection(&hhSess->csTimerMux); return; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HWND sessQueryHwnd(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hwndSess; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HWND sessQueryHwndStatusbar(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hwndStatusbar; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HWND sessQueryHwndToolbar(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hwndToolbar; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HWND sessQueryHwndTerminal(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hwndTerm; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HUPDATE sessQueryUpdateHdl(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hUpdate; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HTIMERMUX sessQueryTimerMux(const HSESSION hSession) { HTIMERMUX hTimerMux; const HHSESSION hhSess = VerifySessionHandle(hSession); hLockTimerMux(hhSess); hTimerMux = hhSess->hTimerMux; return hTimerMux; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ VOID sessReleaseTimerMux(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); hUnlockTimerMux(hhSess); return; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HCLOOP sessQueryCLoopHdl(const HSESSION hSession) { HCLOOP hCLoop; const HHSESSION hhSess = VerifySessionHandle(hSession); hLock(hhSess); hCLoop = hhSess->hCLoop; hUnlock(hhSess); return hCLoop; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HCOM sessQueryComHdl(const HSESSION hSession) { HCOM hCom; const HHSESSION hhSess = VerifySessionHandle(hSession); hLock(hhSess); hCom = hhSess->hCom; hUnlock(hhSess); return hCom; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HEMU sessQueryEmuHdl(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hEmu; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HPRINT sessQueryPrintHdl(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hPrint; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ void sessSetSysFileHdl(const HSESSION hSession, const SF_HANDLE hSF) { const HHSESSION hhSess = VerifySessionHandle(hSession); hLock(hhSess); hhSess->hSysFile = hSF; hUnlock(hhSess); return; } SF_HANDLE sessQuerySysFileHdl(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hSysFile; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HBACKSCRL sessQueryBackscrlHdl(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hBackscrl; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HXFER sessQueryXferHdl(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hXferHdl; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HFILES sessQueryFilesDirsHdl(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hFilesHdl; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HCAPTUREFILE sessQueryCaptureFileHdl(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hCaptFile; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ void sessQueryCmdLn(const HSESSION hSession, LPTSTR pach, const int len) { int i; const HHSESSION hhSess = VerifySessionHandle(hSession); TCHAR *pachCmdLn = hhSess->achSessCmdLn; for (i = 0 ; i < len ; ++i) { if (*pachCmdLn == (TCHAR)0) break; // *pach++ = *pachCmdLn++; if (IsDBCSLeadByte(*pachCmdLn)) { *(WORD *)pach = *(WORD *)pachCmdLn; } else { *pach = *pachCmdLn; } pach = StrCharNext(pach); pachCmdLn = StrCharNext(pachCmdLn); } return; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ int sessQueryTimeout(const HSESSION hSession) { int nTimeout; const HHSESSION hhSess = VerifySessionHandle(hSession); hLock(hhSess); nTimeout = hhSess->nTimeout; hUnlock(hhSess); return nTimeout; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ void sessSetTimeout(const HSESSION hSession, int nTimeout) { const HHSESSION hhSess = VerifySessionHandle(hSession); hLock(hhSess); hhSess->nTimeout = nTimeout; hUnlock(hhSess); } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ HCNCT sessQueryCnctHdl(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hCnct; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ #if defined(INCL_WINSOCK) int sessQueryTelnetPort(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->iTelnetPort; } #endif /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ void sessQueryOldName(const HSESSION hSession, const LPTSTR pach, unsigned uSize) { const HHSESSION hhSess = VerifySessionHandle(hSession); if (pach == 0) return; pach[0] = TEXT('\0'); /* --- uSize is the number of BYTES in the buffer! ---- */ uSize = min(uSize, sizeof(hhSess->achOldSessName)); if (uSize) MemCopy(pach, hhSess->achOldSessName, uSize); pach[uSize-1] = TEXT('\0'); return; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ void sessSetIconID(const HSESSION hSession, const int nID) { const HHSESSION hhSess = VerifySessionHandle(hSession); if (hhSess->nIconId != nID) { hhSess->nIconId = nID; hhSess->hIcon = extLoadIcon(MAKEINTRESOURCE(nID)); //hhSess->hIcon = LoadIcon(glblQueryDllHinst(), MAKEINTRESOURCE(nID)); //hhSess->hLittleIcon = LoadIcon(glblQueryDllHinst(), // MAKEINTRESOURCE(nID + IDI_PROG_ICON_CNT)); } } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ int sessQueryIconID(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->nIconId; } HICON sessQueryIcon(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hIcon; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ void sessSetName(const HSESSION hSession, const LPTSTR pach) { const HHSESSION hhSess = VerifySessionHandle(hSession); /* This is here to catch an overrun I can't reproduce. DLW */ #if !defined(NDEBUG) if (StrCharGetStrLength(pach) > 255) assert(FALSE); #endif StrCharCopyN(hhSess->achSessName, pach, FNAME_LEN + 1); return; } void sessQueryName(const HSESSION hSession, const LPTSTR pach, unsigned uSize) { const HHSESSION hhSess = VerifySessionHandle(hSession); if (pach == 0 || uSize == 0) return; pach[0] = TEXT('\0'); /* --- uSize is the number of BYTES in the buffer! ---- */ uSize = min(uSize, sizeof(hhSess->achSessName)); if (uSize) MemCopy(pach, hhSess->achSessName, uSize); pach[uSize-1] = TEXT('\0'); return; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ HTRANSLATE sessQueryTranslateHdl(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); if (hhSess) { return hhSess->hTranslate; } else { return NULL; } } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessQuerySound * * DESCRIPTION: * Return the sound setting for the session. * * ARGUMENTS: * hSession - the session handle. * * RETURNS: * fSound - the sound setting. */ int sessQuerySound(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return ((int)hhSess->fSound); } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessSetSound * * DESCRIPTION: * Set the sound setting for the session. * * ARGUMENTS: * hSession - the session handle. * * RETURNS: */ void sessSetSound(const HSESSION hSession, int fSound) { const HHSESSION hhSess = VerifySessionHandle(hSession); hhSess->fSound = fSound; return; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessQueryExit * * DESCRIPTION: * Return the exit setting for the session. * * ARGUMENTS: * hSession - the session handle. * * RETURNS: * fExit - the exit setting. */ int sessQueryExit(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return ((int)hhSess->fExit); } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessSetExit * * DESCRIPTION: * Set the exit setting for the session. * * ARGUMENTS: * hSession - the session handle. * * RETURNS: */ void sessSetExit(const HSESSION hSession, int fExit) { const HHSESSION hhSess = VerifySessionHandle(hSession); hhSess->fExit = fExit; return; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessSetIsNewSession * * DESCRIPTION: * Set the fIsNewSession flag. * * ARGUMENTS: * hSession - the session handle. * fIsNewSession - set appropriate session structure item to this value. * * RETURNS: */ void sessSetIsNewSession(const HSESSION hSession, int fIsNewSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); hhSess->fIsNewSession = fIsNewSession; return; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessQueryIsNewSession * * DESCRIPTION: * Query the setting of fIsNewSession flag. * * ARGUMENTS: * hSession - the session handle. * * RETURNS: */ int sessQueryIsNewSession(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return ((int)hhSess->fIsNewSession); } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessIsSessNameDefault * * DESCRIPTION: * Checks to see if the session name is still the default session name * or has the user provided us with a custom session name. * * ARGUMENTS: * pacName - session file name. * * RETURNS: * */ BOOL sessIsSessNameDefault(LPTSTR pacName) { TCHAR ach[FNAME_LEN]; if (pacName[0] == TEXT('\0')) return TRUE; TCHAR_Fill(ach, TEXT('\0'), sizeof(ach) / sizeof(TCHAR)); LoadString(glblQueryDllHinst(), IDS_GNRL_NEW_CNCT, ach, sizeof(ach) / sizeof(TCHAR)); if (StrCharCmp(ach, pacName) == 0) return TRUE; return FALSE; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessQueryWindowRect * * DESCRIPTION: * Query the setting of the session window RECT. * * ARGUMENTS: * hSession - the session handle. * prc - pointer to RECT. * * RETURNS: * void. */ void sessQueryWindowRect(const HSESSION hSession, RECT *prc) { const HHSESSION hhSess = VerifySessionHandle(hSession); *prc = hhSess->rcSess; // mrw:3/10/95 return; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessQueryWindowShowCmd * * DESCRIPTION: * Query the setting of the session window show state. * * ARGUMENTS: * hSession - the session handle. * * RETURNS: * void. */ int sessQueryWindowShowCmd(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return ((int)hhSess->iShowCmd); } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessQuerySidebarHwnd * * DESCRIPTION: * Returns the sidebar window handle * * ARGUMENTS: * hSession - public session handle. * * RETURNS: * Sidebar window handle. * * AUTHOR: Mike Ward, 10-Mar-1995 */ HWND sessQuerySidebarHwnd(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return hhSess->hwndSidebar; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessQueryAllowHostXfers * * DESCRIPTION: * Return the exit setting for the session. * * ARGUMENTS: * hSession - the session handle. * * RETURNS: * fAllowHostXfers - the exit setting. */ BOOL sessQueryAllowHostXfers(const HSESSION hSession) { const HHSESSION hhSess = VerifySessionHandle(hSession); return ((BOOL)hhSess->fAllowHostXfers); } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- * FUNCTION: * sessSetAllowHostXfers * * DESCRIPTION: * Set the exit setting for the session. * * ARGUMENTS: * hSession - the session handle. * fAllowHostXfers - the Allow Host Transfer flag. * * RETURNS: */ void sessSetAllowHostXfers(const HSESSION hSession, BOOL fAllowHostXfers) { const HHSESSION hhSess = VerifySessionHandle(hSession); hhSess->fAllowHostXfers = fAllowHostXfers; return; } /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */