windows-nt/Source/XPSP1/NT/base/headless/watcher/watcherdoc.cpp

233 lines
5.7 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
// watcherDoc.cpp : implementation of the CWatcherDoc class
//
#include "stdafx.h"
#include "watcher.h"
#include "watcherDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CWatcherDoc
IMPLEMENT_DYNCREATE(CWatcherDoc, CDocument)
BEGIN_MESSAGE_MAP(CWatcherDoc, CDocument)
//{{AFX_MSG_MAP(CWatcherDoc)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWatcherDoc construction/destruction
CWatcherDoc::CWatcherDoc()
{
// TODO: add one-time construction code here
COLORREF white = WHITE;
COLORREF black = BLACK;
int i,j,size;
size = MAX_TERMINAL_WIDTH*MAX_TERMINAL_HEIGHT;
INT_PTR nRet;
nRet = Params.DoModal();
if(nRet != IDOK){
// kill document
Params.DeleteValue = TRUE;
return;
}
// TODO: add one-time construction code here
memset(Data,0,MAX_TERMINAL_WIDTH*MAX_TERMINAL_HEIGHT*sizeof(TCHAR));
for(i=0;i<size;i+=MAX_TERMINAL_WIDTH){
for(j=0;j<MAX_TERMINAL_WIDTH;j++){
Background[i+j] = black;
Foreground[i+j] = white;
}
}
return;
}
CWatcherDoc::CWatcherDoc(CString &machine, CString &command, UINT port,
int tc, int lang,int hist, CString &lgnName, CString &lgnPasswd, CString &sess)
{
COLORREF white = WHITE;
COLORREF black = BLACK;
int i,j,size;
size = MAX_TERMINAL_WIDTH*MAX_TERMINAL_HEIGHT;
// TODO: add one-time construction code here
Params.Machine = machine;
Params.Command = command;
Params.Port = port;
Params.tcclnt = tc;
Params.language = lang;
Params.LoginName = lgnName;
Params.LoginPasswd = lgnPasswd;
Params.Session = sess;
Params.history = hist;
memset(Data,0,MAX_TERMINAL_WIDTH*MAX_TERMINAL_HEIGHT*sizeof(TCHAR));
for(i=0;i<size;i+=MAX_TERMINAL_WIDTH){
for(j=0;j<MAX_TERMINAL_WIDTH;j++){
Background[i+j] = black;
Foreground[i+j] = white;
}
}
return;
}
CWatcherDoc::~CWatcherDoc()
{
}
BOOL CWatcherDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
BOOL CWatcherDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
return CDocument::OnOpenDocument(lpszPathName);
}
/////////////////////////////////////////////////////////////////////////////
// CWatcherDoc serialization
void CWatcherDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
/////////////////////////////////////////////////////////////////////////////
// CWatcherDoc diagnostics
#ifdef _DEBUG
void CWatcherDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CWatcherDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CWatcherDoc commands
COLORREF * CWatcherDoc::GetBackground()
{
return (Background);
}
COLORREF * CWatcherDoc::GetForeground()
{
return (Foreground);
}
TCHAR * CWatcherDoc::GetData()
{
return (Data);
}
void CWatcherDoc::SetData(int x, int y, TCHAR byte,
COLORREF foreground, COLORREF background)
{
if (x >= MAX_TERMINAL_WIDTH){
return;
}
if (y>= MAX_TERMINAL_HEIGHT){
return;
}
Data[x+y*MAX_TERMINAL_WIDTH] = byte;
Foreground[x+y*MAX_TERMINAL_WIDTH] = foreground;
Background[x+y*MAX_TERMINAL_WIDTH] = background;
return;
}
void CWatcherDoc::SetData(int x, int y, BYTE byte, int n,
COLORREF foreground, COLORREF background)
{
int i,j;
i=MAX_TERMINAL_WIDTH*y + x;
if (i+n > MAX_TERMINAL_WIDTH*MAX_TERMINAL_HEIGHT) {
return;
}
memset(&(Data[i]),byte, n*sizeof(TCHAR));
for(j=0;j<n;j++){
Foreground[i+j] = foreground;
Background[i+j] = background;
}
return;
}
TCHAR * CWatcherDoc::GetDataLine(int line)
{
return (&(Data[line*MAX_TERMINAL_WIDTH]));
}
BOOL CWatcherDoc::Lock()
{
return mutex.Lock(INFINITE);
}
BOOL CWatcherDoc::Unlock()
{
return mutex.Unlock();
}
void CWatcherDoc::ScrollData(BYTE byte, COLORREF foreground, COLORREF background,
int ScrollTop, int ScrollBottom)
{
if ((ScrollTop < 1)||(ScrollBottom > MAX_TERMINAL_HEIGHT) || (ScrollTop > ScrollBottom)) {
// error
return;
}
int number = MAX_TERMINAL_WIDTH*(ScrollBottom - ScrollTop);
int index1 = (ScrollTop-1)*MAX_TERMINAL_WIDTH;
int index2 = index1 + MAX_TERMINAL_WIDTH;
if (ScrollTop < ScrollBottom) {
memmove(&(Data[index1]),&(Data[index2]), number*sizeof(TCHAR));
memmove(&(Foreground[index1]),&(Foreground[index2]), number*sizeof(TCHAR));
memmove(&(Background[index1]),&(Background[index2]), number*sizeof(TCHAR));
}
// number -= MAX_TERMINAL_WIDTH;
index1 = MAX_TERMINAL_WIDTH*(ScrollBottom - 1);
memset(&(Data[index1]), byte, MAX_TERMINAL_WIDTH*sizeof(TCHAR));
for(int j=0;j<MAX_TERMINAL_WIDTH;j++){
Foreground[index1+j] = foreground;
Background[index1+j] = background;
}
return;
}
ParameterDialog & CWatcherDoc::GetParameters()
{
return Params;
}