⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys_utils.c

📁 图像处理的压缩算法
💻 C
📖 第 1 页 / 共 4 页
字号:
/*------------------------------------------------------------------------------*
 * File Name: sys_utils.c				 										*
 * Creation: GJL 3/13/02														*
 * Purpose: Basic and common utilities for general Origin C development.		*
 * Copyright (c) OriginLab Corp.	2002, 2003, 2004, 2005, 2006, 2007			*
 * All Rights Reserved															*
 * 																				*
 * Modification Log:															*
 *	JCG 06/17/03 QA70-4575 IMP_WIZD_BUG_45_AND_28								*
 * EJP 07-10-2003 v7.0622 QA70-4745 SET_PAGE_IMPORT_INFO_ON_123_ASC_IMPORT		*
 * SY 09-12-2003 QA70-5158 v7.0694 OC_NEED_ROBUST_GET_TEMP_PATH_FUNCTION		*
 * EJP 11-20-2003 v7.5764 QA70-5587 FAIL_TO_EXPORT_1200DPI_BITMAP				*
 * EJP 11-24-2003 v7.5769 QA70-5604 LOCALIZE_FILE_TYPE_ALL_FILES				*
 *------------------------------------------------------------------------------*/

#include <origin.h> // main Origin C header that is precompiled and already include most headers 
// TD 10-22-03 REMOVED_DEPENDENCY
//#include "Filter_Utils.h"
#include "local.h"

/// EJP 11-24-2003 v7.5769 QA70-5604 LOCALIZE_FILE_TYPE_ALL_FILES
#define FILETYPE_ALL_FILES _L("[All Files (*.*)] *.*")
/// end LOCALIZE_FILE_TYPE_ALL_FILES

/**
	It appends to the string str the ' ' characters until its size
	reaches nSize. 
*/
void	append_blanks_to_size(string &str, int nSize)
{
	int		nLength = str.GetLength();
	for (int ii = nLength + 1; ii <= nSize; ii++)
		str += ' ';
	
	return;
}

// Function prototypes of static functions

static int GetFDLogBox( StringArray &saFilePaths, FDLogDialogType fdtDialogType );

static int GetFileDialogBox( StringArray &saFilePaths, StringArray &saFiletypes, FDLogDialogType fdtDialogType = FDLOG_TYPE_OPEN_SINGLE,
	 LPCSTR lpcszPath = NULL, LPCSTR lpcszFilename = NULL, LPCSTR lpcszDialogName = NULL );

static int GetFileDialogBox( StringArray &saFilePaths, FDLogUseGroup nFDLogUseGroup, FDLogDialogType fdtDialogType = FDLOG_TYPE_OPEN_SINGLE,
	 LPCSTR lpcszPath = NULL, LPCSTR lpcszFilename = NULL, LPCSTR lpcszDialogName = NULL );

static int GetFileDialogBox( StringArray& saFilePaths, LPCSTR lpcszFileType = NULL, FDLogDialogType fdtDialogType = FDLOG_TYPE_OPEN_SINGLE,
	 LPCSTR lpcszPath = NULL, LPCSTR lpcszFilename = NULL, LPCSTR lpcszDialogName = NULL );

//////////////////////////////////////////////////////////////////////////////////
/**
		Resets or initializes the LabTalk FDLog object. Should be called prior to
		opening an FDLog dialog box.
	Example:
		FDLogInit();
	Parameters:
		None
	Return:
		Returns 0 on successful exit.
*/
int FDLogInit()
{
	_LT_Obj
	{
		FDLog.Reset();                // Reset FDLog object
		FDLOG.OptionDLG$ = "";        // Reset button to off
		FDLOG.Checkname$ = "";        // Reset check box to null
		FDLOG.ShowComment = 0;        // Reset the comments box to closed
		FDLOG.CheckStatus = 0;        // Reset checkbox to off
		FDLOG.DlgName$ = "";		  // Reset dialog name to nothing
		FDLOG.Path$ = "";			  // Reset default path to nothing	
		FDLOG.Default$ = "";		  // Reset contents of "File Name" edit box to nothing
		FDLOG.AsReadOnly = 0;         // Reset read only checkbox to disabled
		//------------------- CPY v6.0252 t6746 1/26/00 MULTI_OPEN_SUPPORT_BY_ROW_AND_BY_COL_APPEND
		FDLOG.MultiOpen.ComboName$ = "";
		if( FDLOG.MultiOpen.ComboSel < 1 || FDLOG.MultiOpen.ComboSel > 3 )
			FDLOG.MultiOpen.ComboSel = 2; // Import into new columns
		//------------------- end t6746

		//------------------- GJL v7.0358 QA70-4078 3/17/03 ORIGINC_MULTI_OPEN_SUPPORT
		FDLOG.Open.MultiSel = 0;      // Reset multiple selection switch (turn off by default)
		//------------------- QA70-4078
	}
	
	return 0;
}

//------------------- GJL v7.0357 QA70-4078 3/17/03 ORIGINC_MULTI_OPEN_SUPPORT
//////////////////////////////////////////////////////////////////////////////////
/**
		Open an FDLog dialog box having the enumerated type FDLogDialogType with
		possible values FDLOG_TYPE_SAVE_AS, FDLOG_TYPE_OPEN_SINGLE, FDLOG_TYPE_OPEN_MULTISEL,
		and FDLOG_TYPE_MULTI_OPEN. Return the path and filename of all selected files. 
	Example:
		See overloaded GetFileDialogBox functions in this source file. 
	Parameters:
		saFilePaths=Output vector of strings containing path and filename of all selected files
		fdtDialogType=Input type of dialog: FDLOG_TYPE_SAVE_AS, FDLOG_TYPE_OPEN_SINGLE, FDLOG_TYPE_OPEN_MULTISEL,
			and FDLOG_TYPE_MULTI_OPEN
	Return:
		Returns the number of selected files.
*/
static int GetFDLogBox( StringArray &saFilePaths, FDLogDialogType fdtDialogType )
{
	char szTemp[ MAXFULLPATH ];
	
	saFilePaths.SetSize(1);                      // Assume 1 file
	saFilePaths[0] = "";                         // Initialize path and filename to ""
	
	using FDLog = LabTalk.FDLog;                 // Use LabTalk FDLog object
	
	switch( fdtDialogType )                      // Open requested dialog type
	{
		case FDLOG_TYPE_SAVE_AS:
			if( FDLog.SaveAs( "A" ) )                    // Open SaveAs dialog box
				return 0;                                // Error, 0 files selected
			else
			{
				LT_get_str( "%A", szTemp, MAXFULLPATH ); // Get filename of selected file from LabTalk variable
				saFilePaths[0] = FDLog.Path$ + szTemp;   // Return path and filename
			}
			return 1;                                    // Return number of selected files
		case FDLOG_TYPE_OPEN_SINGLE:
			FDLog.Open.MultiSel = 0;
			if( FDLog.Open( "A" ) )                      // Open Single Open dialog box without muliple selection
				return 0;                                // Error, 0 files selected
			else
			{
				LT_get_str( "%A", szTemp, MAXFULLPATH ); // Get filename of selected file from LabTalk variable
				saFilePaths[0] = FDLog.Path$ + szTemp;   // Return path and filename
			}
			return 1;                                    // Return number of selected files
		case FDLOG_TYPE_OPEN_MULTISEL:
			FDLog.Open.MultiSel = 1;    
			if( FDLog.Open( "A" ) )                              // Open Single Open dialog box with multiple selection
				return 0;                                        // Error, 0 files selected
			saFilePaths.SetSize(FDLog.MultiOpen.Count);
			for( int ii = 0; ii < FDLog.MultiOpen.Count; ii++ )  // For each file selected
			{
				FDLog.Get("A", ii+1);                            // Get filename into LabTalk variable
				LT_get_str( "%A", szTemp, MAXFULLPATH );         // Get filename of selected file from LabTalk variable
				saFilePaths[ii] = FDLog.Path$ + szTemp;          // Return path and filename
			}
			return ii;                                           // Return number of selected files
		case FDLOG_TYPE_MULTI_OPEN:
			FDLog.MultiOpen.ColView = FDLOG_MULTI_OPEN_SHOW_FILE_SIZE |
			                          FDLOG_MULTI_OPEN_SHOW_MODIFY; // Display Filename, Size, and Modified
			FDLog.Checkname$="";                                 // Clear Checkbox name 
			if( FDLog.MultiOpen() == NANUM )                     // Open Multi-Open dialog box
				return 0;                                        // Error, 0 files selected
			saFilePaths.SetSize(FDLog.MultiOpen.Count);
			for( int ii = 0; ii < FDLog.MultiOpen.Count; ii++ )  // For each file selected
			{
				FDLog.Get("A", ii+1);                            // Get path and filename into LabTalk variable
				LT_get_str( "%A", szTemp, MAXFULLPATH );         // Get path and filename of selected file from LabTalk variable
				saFilePaths[ii] = szTemp;                        // Return path and filename
			}
			return ii;                                           // Return number of selected files
		default:
			return 0;                                    // Return with 0 files saved or opened
	}
	
	return 0;                                    // Return with 0 files saved or opened
}
//------------------- QA70-4078

//////////////////////////////////////////////////////////////////////////////////

/**
		Open an FDLog SaveAs, Open (with or without multiple selection enabled), or
		MultiOpen dialog box passing the file types to list in an array of strings. 
	Example:
		See overloaded GetSaveAsBox, GetOpenBox, and GetMultiOpenBox functions in
		this source file.
	Parameters:
		saFilePaths=Output vector of strings containing path and filename of all selected files
		saFiletypes=Vector containing file types to list in the dialog box, each element
			of vector must follow syntax of LabTalk FDLog.TypeN$ object property
		fdtDialogType=Input type of dialog: FDLOG_TYPE_SAVE_AS, FDLOG_TYPE_OPEN_SINGLE, FDLOG_TYPE_OPEN_MULTISEL,
			and FDLOG_TYPE_MULTI_OPEN
		lpcszPath=Initial path when dialog opens, default NULL uses FDLog tracking
		lpcszFileName=Initial filename when dialog opens, default NULL uses an empty string 
		lpcszDialogName=Title of the dialog box, default NULL uses "Open" or "Save As" 
	Return:
		Returns the number of selected files.
*/
static int GetFileDialogBox( StringArray &saFilePaths, StringArray &saFiletypes, FDLogDialogType fdtDialogType,
	 LPCSTR lpcszPath, LPCSTR lpcszFilename, LPCSTR lpcszDialogName ) // fdtDialogType = FDLOG_TYPE_OPEN_SINGLE, lpcszPath = NULL, lpcszFilename = NULL, lpcszDialogName = NULL
{
	int ii, iSize;
	string strDefaultPath = lpcszPath;
	string strDefaultFilename = lpcszFilename;
	string strDialogName = lpcszDialogName;
	string strLTCommand;
	
	_LT_Obj
	{
		if( strDefaultPath.IsEmpty() )               // If path is not passed as argument...
			strDefaultPath = FDLog.Path$;            //   get last used path from FDLog object for tracking

		FDLogInit();                                 // Initialize LabTalk FDLog object
		
		if( !strDefaultPath.IsEmpty() )              // If path is passed as argument or is being tracked...
			FDLog.Path$ = strDefaultPath;            //   initialize path

		FDLog.Default$ = strDefaultFilename;         // Initialize filename

		iSize = saFiletypes.GetSize();                // Get number of file types
		if( iSize <= 1 && saFiletypes[ii].IsEmpty() ) // If no file types are specified...
		{
			iSize = 0;                               //   set size as 0
			FDLog.NumTypes = iSize;                  //   initialize number of passed filetypes to 0
		}
		else                                         // Else filetypes are specified...
		{
			FDLog.NumTypes = iSize;                  //   initialize number of passed filetypes
			FDLog.Deftype=1;                         //   initialize default filetype to first in filetype list
			for( ii = 0; ii < iSize; ii++ )          //   loop on all filetypes
			{
				strLTCommand.Format( "FDLog.Type%d$=%s;", ii+1, saFiletypes[ii] ); // create enumerated LabTalk command
				LT_execute( strLTCommand );          //     execute enumerated LabTalk command to initialize filetypes
			}
		}
		FDLog.DlgName$ = strDialogName;              // Initialize dialog box name

		return GetFDLogBox(saFilePaths, fdtDialogType); // Open FDLog dialog box and get path and filename(s)
	}
}

/**
		Open an FDLog SaveAs, Open (with or without multiple selection enabled), or
		MultiOpen dialog box using an enumerated FDLog.UseGroup code to indicate the
		set of file types to list. See sys_utils.h or the Origin.ini file for a list
		of the enumerated FDLOG.UseGroup codes.
	Example:
		See overloaded GetSaveAsBox, GetOpenBox, and GetMultiOpenBox functions in
		this source file.
	Parameters:
		saFilePaths=Output vector of strings containing path and filename of all selected files
		nFDLogUseGroup=A LabTalk FDLog.UseGroup code as enumerated in sys_utils.h and in the Origin.ini file
		fdtDialogType=Input type of dialog: FDLOG_TYPE_SAVE_AS, FDLOG_TYPE_OPEN_SINGLE, FDLOG_TYPE_OPEN_MULTISEL,
			and FDLOG_TYPE_MULTI_OPEN
		lpcszPath=Initial path when dialog opens, default NULL uses FDLog tracking
		lpcszFileName=Initial filename when dialog opens, default NULL uses an empty string 
		lpcszDialogName=Title of the dialog box, default NULL uses "Open" or "Save As" 
	Return:
		Returns the number of selected files.
*/
static int GetFileDialogBox( StringArray &saFilePaths, FDLogUseGroup nFDLogUseGroup, FDLogDialogType fdtDialogType,
	 LPCSTR lpcszPath, LPCSTR lpcszFilename, LPCSTR lpcszDialogName ) // fdtDialogType = FDLOG_TYPE_OPEN_SINGLE, lpcszPath = NULL, lpcszFilename = NULL, lpcszDialogName = NULL
{
	string strFDLogUseGroup;
	string strDefaultPath = lpcszPath;
	string strDefaultFilename = lpcszFilename;
	string strDialogName = lpcszDialogName;
	string strIniKeyName;
	double dNumGroups;
	char szTemp[ MAXFULLPATH ];

	_LT_Obj
	{
		FDLogInit();                                            // Initialize LabTalk FDLog object

		if( nFDLogUseGroup < FDLOG_FILTER_ASCII )
		{
			ini.file$ = "Origin.ini";                               // Look in Origin.ini file for UseGroup NumGroups and Name
			
	        // Check that UseGroup is between 1 and ini.FileExt.NumGroups
			LT_get_var( "ini.FileExt.NumGroups", &dNumGroups );     // Get number of currently defined UseGroups
			if( nFDLogUseGroup > dNumGroups || nFDLogUseGroup < 1 ) // If UseGroup is out of bounds use blank for All Files 
				strFDLogUseGroup = "";
			else                                                    // Else get UseGroup name from Origin.ini
			{
				strIniKeyName.Format( "%%A=ini.FileExt.%d_Name$", nFDLogUseGroup ); // Format LabTalk command to get UseGroup name
				LT_execute( strIniKeyName );                        // Get specfied UseGroup name
				LT_get_str( "%A", szTemp, MAXFULLPATH );
				strFDLogUseGroup = szTemp;
			}
	
			FDLog.UseGroup( strFDLogUseGroup );          // Execute FDLog.UseGroup method to set file types and path
		}
		else
		{
			switch( nFDLogUseGroup )
			{
			case FDLOG_FILTER_ASCII:
				FDLog.UseGroup("ASCII");
				FDLog.AddUserTypes(FILTER_TYPE_ASCII);
				break;
			case FDLOG_FILTER_BINARY:
				FDLog.NumTypes = 0;
				FDLog.AddUserTypes(FILTER_TYPE_BINARY);
				FDlog.AddType(FILETYPE_ALL_FILES);
				break;
			case FDLOG_FILTER_USERDEFINED:
				FDLog.NumTypes = 0;
				FDLog.AddUserTypes(FILTER_TYPE_USERDEFINED);
				FDlog.AddType(FILETYPE_ALL_FILES);
				break;
			}
		}

		if( !strDefaultPath.IsEmpty() )              // If path is passed as argument...
			FDLog.Path$ = strDefaultPath;            //   initialize path overwriting FDLog.UseGroup setting

		FDLog.Default$ = strDefaultFilename;         // Initialize filename

		FDLog.DlgName$ = strDialogName;              // Initialize dialog box name
		
		return GetFDLogBox(saFilePaths, fdtDialogType); // Open FDLog dialog box and get path and filename(s)
	}
}

//////////////////////////////////////////////////////////////////////////////////
/**
		An easier to use version of GetFileDialogBox that works for a single file type.
	Example:
		See overloaded GetSaveAsBox, GetOpenBox, and GetMultiOpenBox functions in
		this source file.
	Parameters:
		saFilePaths=Output vector of strings containing path and filename of all selected files
		lpcszFileType="*.ext description", or "[decription (*.ext)] *.ext", or just "*.ext"
		fdtDialogType=Input type of dialog: FDLOG_TYPE_SAVE_AS, FDLOG_TYPE_OPEN_SINGLE, FDLOG_TYPE_OPEN_MULTISEL,
			and FDLOG_TYPE_MULTI_OPEN
		lpcszPath=Initial path when dialog opens, default NULL uses FDLog tracking
		lpcszFileName=Initial filename when dialog opens, default NULL uses an empty string 
		lpcszDialogName=Title of the dialog box, default NULL uses "Open" or "Save As" 
	Return:
		Returns the number of selected files.
*/
static int GetFileDialogBox( StringArray& saFilePaths, LPCSTR lpcszFileType, FDLogDialogType fdtDialogType,
	 LPCSTR lpcszPath, LPCSTR lpcszFilename, LPCSTR lpcszDialogName) // lpcszFileType = NULL, fdtDialogType = FDLOG_TYPE_OPEN_SINGLE, lpcszPath = NULL, lpcszFileName = NULL, lpcszDialogName = NULL
{
	string strFileType;
	if( lpcszFileType )
		strFileType = lpcszFileType;
	else
		strFileType = "*.* All Files";

	string strFileTypeText;
	
	strFileType.TrimLeft();			  // In case there are blanks to ensure proper testing of 1st char
	if(strFileType[0] == '[')
		strFileTypeText = strFileType;// User specified in correct LabTalk syntax, we will use as is
	else
	{
		// We will construct the proper syntax here
		if(strFileType[0] != '*' || strFileType[1] != '.')
			return "";	              // Bad format, return empty string
		
		int nFileTypeTextSeparator = strFileType.Find(' ');
		if(nFileTypeTextSeparator > 0) // There is explanation text after ext
		{
			string strText = strFileType;
			strFileType = strText.Left(nFileTypeTextSeparator);
			strText = strText.Mid(nFileTypeTextSeparator+1);
			strFileTypeText = "[" + strText + " (" + strFileType + ")] " + strFileType;
		}
		else
			strFileTypeText = "[" + strFileType + " (" + strFileType + ")] " + strFileType;
	}
		
	StringArray saFiletypes;
	saFiletypes.SetSize( 1 );
	saFiletypes[0]=strFileTypeText; // "[Project (*.OPJ)] *.OPJ";
	
	return GetFileDialogBox( saFilePaths, saFiletypes, fdtDialogType, lpcszPath, lpcszFilename, lpcszDialogName );
}

//////////////////////////////////////////////////////////////////////////////////
/**
		Open an FDLog Browse (OpenPath) dialog box.
	Example:
		string strPath;
		strPath = BrowseGetPath();                                      // or
		strPath = BrowseGetPath( "C:\\Program Files\\" );               // or
		strPath = BrowseGetPath( GetAppPath() + "OriginC\\", "Browse" );
	Parameters:
		lpcszPath=Initial path when dialog opens, default NULL uses FDLog tracking  
		lpcszDialogName=Title of the dialog box, default NULL uses "Open" 
	Return:
		Returns the path browsed to or an empty string if Cancel button in dialog
		box is clicked.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -