449 lines
13 KiB
C++
449 lines
13 KiB
C++
//=============================================================================
|
|
// (c) Copyright Wang Laboratories, Inc. 1995 All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
// Project: Norway - Image Editor
|
|
//
|
|
// Component: CCmdLine
|
|
//
|
|
// File Name: cmdline.cpp
|
|
//
|
|
// Class: CCmdLine
|
|
//
|
|
// Functions:
|
|
//-----------------------------------------------------------------------------
|
|
// Maintenance Log:
|
|
/*
|
|
$Header: S:\norway\iedit95\cmdline.cpv 1.16 25 Oct 1995 17:33:08 GMP $
|
|
$Log: S:\norway\iedit95\cmdline.cpv $
|
|
|
|
Rev 1.16 25 Oct 1995 17:33:08 GMP
|
|
check for valid size values.
|
|
|
|
Rev 1.15 28 Sep 1995 15:49:04 JPRATT
|
|
force app into view mode for PrintTo command
|
|
|
|
Rev 1.14 21 Sep 1995 14:46:28 GMP
|
|
test for min zoom of 2 instead of 4 on command line.
|
|
|
|
Rev 1.13 20 Sep 1995 18:31:02 MMB
|
|
fixed bug# 4537 - size info on command line was not being parsed correctly
|
|
|
|
Rev 1.12 11 Aug 1995 09:02:26 MMB
|
|
added error processing to the commandline stuff
|
|
|
|
Rev 1.11 19 Jul 1995 11:35:04 MMB
|
|
fix bug for /view mode
|
|
|
|
Rev 1.10 12 Jul 1995 09:10:22 MMB
|
|
process zoom as float
|
|
|
|
Rev 1.9 11 Jul 1995 14:45:18 MMB
|
|
added /pt processing
|
|
|
|
Rev 1.8 11 Jul 1995 12:02:46 MMB
|
|
once AGAIN!!
|
|
|
|
Rev 1.7 11 Jul 1995 11:42:26 MMB
|
|
fixed extract of filename
|
|
|
|
Rev 1.6 11 Jul 1995 11:27:40 MMB
|
|
/p on cmd line must have filename in double quotes
|
|
|
|
Rev 1.4 10 Jul 1995 15:11:02 MMB
|
|
fix command line extraction process
|
|
|
|
Rev 1.3 07 Jul 1995 09:38:40 MMB
|
|
added /p processing to the command line
|
|
|
|
Rev 1.2 29 Jun 1995 15:23:32 LMACLENNAN
|
|
comment out error.h for now
|
|
|
|
Rev 1.1 16 Jun 1995 07:20:04 LMACLENNAN
|
|
from miki
|
|
|
|
Rev 1.0 31 May 1995 09:28:04 MMB
|
|
Initial entry
|
|
|
|
Rev 1.0 24 Apr 1995 14:04:38 MMB
|
|
Initial entry
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
// ----------------------------> Includes <-------------------------------
|
|
#include "stdafx.h"
|
|
#include "ieditetc.h"
|
|
#include "error.h"
|
|
#include "resource.h"
|
|
#include "cmdline.h"
|
|
#include "iedit.h"
|
|
|
|
// ALL READY FOR ERROR PROCESSING...
|
|
//#define E_10_CODES // limits error defines to ours..
|
|
//#include "error.h"
|
|
|
|
// ----------------------------> Globals <-------------------------------
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
// ---------------------------> Message Maps <----------------------------
|
|
|
|
//=============================================================================
|
|
// Function: CCmdLine ()
|
|
//-----------------------------------------------------------------------------
|
|
CCmdLine::CCmdLine ()
|
|
{
|
|
m_szCmdLine = (const char*) NULL;
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: CCmdLine (CString& )
|
|
//-----------------------------------------------------------------------------
|
|
CCmdLine::CCmdLine (CString& szCmdLine)
|
|
{
|
|
m_szCmdLine = szCmdLine;
|
|
ProcessCmdLine ();
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: CCmdLine (const char* )
|
|
//-----------------------------------------------------------------------------
|
|
CCmdLine::CCmdLine (LPCTSTR szCmdLine)
|
|
{
|
|
m_szCmdLine = szCmdLine;
|
|
ProcessCmdLine ();
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: SetCommandLine (LPCTSTR szCmdLine)
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CCmdLine::SetCommandLine (LPCTSTR szCmdLine)
|
|
{
|
|
m_szCmdLine = szCmdLine;
|
|
return (ProcessCmdLine ());
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: ~CCmdLine ()
|
|
//-----------------------------------------------------------------------------
|
|
CCmdLine::~CCmdLine ()
|
|
{
|
|
m_szCmdLine = (const char*) NULL;
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: GetPageNumber (int& pagenum)
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CCmdLine::GetPageNumber (int& pagenum)
|
|
{
|
|
if (m_nPageNum != 0)
|
|
{
|
|
pagenum = m_nPageNum;
|
|
return TRUE;
|
|
}
|
|
|
|
pagenum = 1;
|
|
return (FALSE);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: GetWindowSize (CRect& rect)
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CCmdLine::GetWindowSize (CRect& rect)
|
|
{
|
|
if (!m_WindowPos.IsRectEmpty())
|
|
{
|
|
rect = m_WindowPos;
|
|
return (TRUE);
|
|
}
|
|
|
|
return (FALSE);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: GetZoomFactor (float& fZoom)
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CCmdLine::GetZoomFactor (float& fZoom)
|
|
{
|
|
if (m_fZoom == -1.0)
|
|
return (FALSE);
|
|
|
|
fZoom = m_fZoom;
|
|
return (TRUE);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: GetFileName ()
|
|
//-----------------------------------------------------------------------------
|
|
CString& CCmdLine::GetFileName ()
|
|
{
|
|
return (m_szFileName);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: IsAppInEditMode ()
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CCmdLine::IsAppInEditMode ()
|
|
{
|
|
return (m_bIsInEdit);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: ProcessCmdLine ()
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CCmdLine::ProcessCmdLine ()
|
|
{
|
|
// set up the defaults
|
|
m_WindowPos.SetRectEmpty ();
|
|
m_nPageNum = 0;
|
|
m_fZoom = (float)-1.0;
|
|
m_bIsInEdit = TRUE;
|
|
m_szFileName = (LPCTSTR) NULL;
|
|
m_bDoPrintOnly = FALSE;
|
|
|
|
m_bDoPrintToOnly = FALSE;
|
|
|
|
int i = 0, nLen;
|
|
CString szTmp;
|
|
|
|
// if the command line is NULL so much the better; this baby is going to fly
|
|
if (m_szCmdLine.IsEmpty ())
|
|
return (TRUE);
|
|
|
|
if (ExtractFromCmdLine (_T("/pt"), szTmp, TRUE))
|
|
{
|
|
m_bDoPrintToOnly = TRUE;
|
|
m_bIsInEdit = FALSE; // always set to view mode when printto i.e. fax
|
|
goto Extract_FileName;
|
|
}
|
|
|
|
// get VIEW or EDIT mode flag - default is EDIT mode
|
|
if (ExtractFromCmdLine (_T("/view"), szTmp, TRUE))
|
|
m_bIsInEdit = FALSE;
|
|
|
|
// get PAGE number - default page number returned will be 1
|
|
szTmp = (LPCTSTR) NULL;
|
|
if (ExtractFromCmdLine (_T("/page="), szTmp))
|
|
{
|
|
m_nPageNum = atoi (szTmp);
|
|
if (m_nPageNum <= 0)
|
|
{
|
|
g_pErr->PutErr (ErrorInApplication, IDS_E_CMDLINE_PAGEERROR);
|
|
return (FALSE);
|
|
}
|
|
}
|
|
|
|
// are we being called to do print only ?
|
|
szTmp = (LPCTSTR) NULL;
|
|
if (ExtractFromCmdLine (_T("/p"), szTmp, TRUE))
|
|
m_bDoPrintOnly = TRUE;
|
|
|
|
// get the zoom factor
|
|
szTmp = (LPCTSTR) NULL;
|
|
if (ExtractFromCmdLine (_T("/zoom="), szTmp))
|
|
{
|
|
m_fZoom = (float)atof (szTmp);
|
|
if (m_fZoom < 2.00 || m_fZoom > 6500.00)
|
|
{
|
|
g_pErr->PutErr (ErrorInApplication, IDS_E_CMDLINE_ZOOMERROR);
|
|
return (FALSE);
|
|
}
|
|
}
|
|
|
|
// get the initial WINDOW POSITION
|
|
szTmp = (LPCTSTR) NULL;
|
|
if (ExtractFromCmdLine (_T("/size="), szTmp))
|
|
{
|
|
i = 0;
|
|
int j = szTmp.GetLength(), comma_cnt = 0;
|
|
CString szTmp1 = (LPCTSTR) NULL;
|
|
while (i < j)
|
|
{
|
|
if (szTmp[i++] == ',') comma_cnt++;
|
|
}
|
|
if (comma_cnt != 3)
|
|
{
|
|
g_pErr->PutErr (ErrorInApplication, IDS_E_CMDLINE_WINDOWPOSERROR);
|
|
return (FALSE);
|
|
}
|
|
|
|
CWnd *pTopWnd = theApp.m_pMainWnd->GetDesktopWindow();
|
|
CRect rTopRect;
|
|
i = 0;
|
|
|
|
if( !pTopWnd )//GMP
|
|
{
|
|
g_pErr->PutErr (ErrorInApplication, IDS_E_CMDLINE_WINDOWPOSERROR);
|
|
return (FALSE);
|
|
}
|
|
pTopWnd->GetWindowRect( &rTopRect );
|
|
// extract x, y, cx, cy from szTmp
|
|
while (szTmp[i] != ',') szTmp1 += szTmp[i++];
|
|
m_WindowPos.left = atoi (szTmp1);
|
|
i++; szTmp1 = (LPCTSTR) NULL;
|
|
|
|
while (szTmp[i] != ',') szTmp1 += szTmp[i++];
|
|
m_WindowPos.top = atoi (szTmp1);
|
|
i++; szTmp1 = (LPCTSTR) NULL;
|
|
|
|
while (szTmp[i] != ',') szTmp1 += szTmp[i++];
|
|
m_WindowPos.right = atoi (szTmp1);
|
|
i++; szTmp1 = (LPCTSTR) NULL;
|
|
|
|
LPCTSTR lpszTmp = szTmp.GetBuffer (szTmp.GetLength());
|
|
m_WindowPos.bottom = atoi (lpszTmp + i);
|
|
szTmp.ReleaseBuffer ();
|
|
if (rTopRect.left > m_WindowPos.left || rTopRect.left > m_WindowPos.right ||
|
|
rTopRect.top > m_WindowPos.top || rTopRect.top > m_WindowPos.bottom ||
|
|
rTopRect.right < m_WindowPos.right || rTopRect.right < m_WindowPos.left ||
|
|
rTopRect.bottom < m_WindowPos.bottom || rTopRect.bottom < m_WindowPos.top)
|
|
{
|
|
g_pErr->PutErr (ErrorInApplication, IDS_E_CMDLINE_WINDOWPOSERROR);
|
|
return (FALSE);
|
|
}
|
|
}
|
|
|
|
Extract_FileName :
|
|
// look for double quotes - the filename might be in there
|
|
int FirstQuote = m_szCmdLine.Find (_T('"')),
|
|
LastQuote = m_szCmdLine.ReverseFind (_T('"'));
|
|
|
|
if (m_bDoPrintOnly)
|
|
{
|
|
// we are going to do print ONLY - there must be quotes around the filename
|
|
if (FirstQuote == LastQuote || FirstQuote == -1 || LastQuote == -1)
|
|
// valid filename not supplied
|
|
return TRUE;
|
|
m_szFileName = m_szCmdLine.Mid (FirstQuote + 1, LastQuote - (FirstQuote + 1));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
if (m_bDoPrintToOnly)
|
|
{
|
|
i = FirstQuote + 1;
|
|
while (m_szCmdLine[i] != _T('"'))
|
|
m_szFileName += m_szCmdLine[i++];
|
|
return (TRUE);
|
|
}
|
|
|
|
if (FirstQuote != -1 || LastQuote != -1)
|
|
{
|
|
// there are quotes in the remainder of the command line
|
|
if (FirstQuote == LastQuote) return TRUE; // invalid file name
|
|
// else - extract the filename and return
|
|
m_szFileName = m_szCmdLine.Mid (FirstQuote + 1, LastQuote - (FirstQuote + 1));
|
|
return TRUE;
|
|
}
|
|
|
|
// the filename is NOT within quotes
|
|
i = 0;
|
|
nLen = m_szCmdLine.GetLength ();
|
|
while (i < nLen)
|
|
{
|
|
if (m_szCmdLine[i] != ' ')
|
|
{
|
|
m_szFileName = m_szCmdLine.Right(nLen - i);
|
|
break;
|
|
}
|
|
i++;
|
|
}
|
|
|
|
if (!m_szFileName.IsEmpty())
|
|
{
|
|
LPTSTR lpStr = m_szFileName.GetBuffer (m_szFileName.GetLength ());
|
|
int nlen = m_szFileName.GetLength () - 1;
|
|
while (lpStr[nlen] == _T(' '))
|
|
{
|
|
lpStr[nlen] = NULL;
|
|
nlen--;
|
|
}
|
|
|
|
m_szFileName.ReleaseBuffer ();
|
|
|
|
if (nlen > 0)
|
|
return (TRUE);
|
|
}
|
|
|
|
// if no filename is given then reset the rest of the initial variables
|
|
// as they do not apply
|
|
m_WindowPos.SetRectEmpty ();
|
|
m_nPageNum = 0;
|
|
m_fZoom = (float)-1.0;
|
|
return (TRUE);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: ExtractFromCmdLine (...)
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CCmdLine::ExtractFromCmdLine (LPCTSTR lpszOption, CString& szExtracted, BOOL bJustRemove)
|
|
{
|
|
// find the option first
|
|
int nStartFrom = m_szCmdLine.Find (lpszOption);
|
|
if (nStartFrom == -1)
|
|
// not found
|
|
return (FALSE);
|
|
|
|
szExtracted = (LPCTSTR) NULL;
|
|
int nGetFrom = lstrlen (lpszOption) + nStartFrom;
|
|
|
|
if (!bJustRemove)
|
|
{
|
|
// lets extract the stuff after the '=' to sign first
|
|
int nMax = m_szCmdLine.GetLength ();
|
|
while (nGetFrom < nMax)
|
|
{
|
|
if (m_szCmdLine[nGetFrom] != ' ')
|
|
szExtracted += m_szCmdLine[nGetFrom];
|
|
else
|
|
goto DO_MORE;
|
|
|
|
nGetFrom++;
|
|
}
|
|
}
|
|
|
|
DO_MORE :
|
|
// remove the option from the command line
|
|
int nGotThese = lstrlen (lpszOption) + szExtracted.GetLength();
|
|
LPTSTR lpStr = m_szCmdLine.GetBuffer (m_szFileName.GetLength ());
|
|
for (int n = nStartFrom; n < (nStartFrom + nGotThese); lpStr[n++] = _T(' '));
|
|
m_szCmdLine.ReleaseBuffer ();
|
|
return (TRUE);
|
|
}
|
|
|
|
//=============================================================================
|
|
// Function: GetPrintToParms (...)
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CCmdLine::GetPrintToParms (LPCTSTR szCmdLine, CString& szPrinterName, CString& szDriverName, CString& szPortName)
|
|
{
|
|
m_szCmdLine = szCmdLine;
|
|
|
|
szPrinterName = (LPCTSTR) NULL;
|
|
szDriverName = (LPCTSTR) NULL;
|
|
szPortName = (LPCTSTR) NULL;
|
|
|
|
int FirstQuote = m_szCmdLine.Find (_T('"'));
|
|
if (FirstQuote == -1) return FALSE;
|
|
int i = FirstQuote + 1;
|
|
while (m_szCmdLine[i++] != _T('"')); // skip the filename
|
|
while (m_szCmdLine[i++] != _T('"'));
|
|
|
|
while (m_szCmdLine[i] != _T('"'))
|
|
szPrinterName += m_szCmdLine[i++];
|
|
i++;
|
|
while (m_szCmdLine[i++] != _T('"'));
|
|
|
|
|
|
while (m_szCmdLine[i] != _T('"'))
|
|
szDriverName += m_szCmdLine[i++];
|
|
i++;
|
|
while (m_szCmdLine[i++] != _T('"'));
|
|
|
|
while (m_szCmdLine[i] != _T('"'))
|
|
szPortName += m_szCmdLine[i++];
|
|
|
|
return TRUE;
|
|
}
|