clutil.cpp

来自「计算文件hash值的源代码」· C++ 代码 · 共 175 行

CPP
175
字号
/*
	---------------------------------------------------------------------------
	Copyright (c) 2003, Dominik Reichl <dominik.reichl@t-online.de>, Germany.
	All rights reserved.

	Distributed under the terms of the GNU General Public License v2.

	This software is provided 'as is' with no explicit or implied warranties
	in respect of its properties, including, but not limited to, correctness 
	and/or fitness for purpose.
	---------------------------------------------------------------------------
*/

#include "clutil.h"
#include "rehash.h"

bool isArgument(char *pszString)
{
	if(pszString == NULL) return false;

	if(pszString[0] == '-') return true;

	return false;
}

void fmtArgument(char *pszArg, char *pszDest)
{
	unsigned int i = 0;
	int pos = 0;

	if(pszArg == NULL) return;
	if(pszDest == NULL) return;

	pszDest[0] = 0;

	// Filter special characters
	for(i = 0; i < strlen(pszArg); i++)
	{
		if(pszArg[i] == '-') continue;
		if(pszArg[i] == '#') continue;
		if(pszArg[i] == ' ') continue;
		if(pszArg[i] == '<') continue;
		if(pszArg[i] == '>') continue;
		if(pszArg[i] == '(') continue;
		if(pszArg[i] == ')') continue;
		if(pszArg[i] == '[') continue;
		if(pszArg[i] == ']') continue;
		if(pszArg[i] == '/') continue;
		if(pszArg[i] == '\\') continue;
		if(pszArg[i] == '\"') continue;

		pszDest[pos] = pszArg[i];
		pos++;
	}

	pszDest[pos] = 0;

	strlwr(pszDest);
}

void fmtPath(char *pszPath)
{
	unsigned int i = 0;
	char chFind = 0;
	char chReplace = 0;

	if(pszPath == NULL) return;
	if(strlen(pszPath) == 0) return;

	#if(RH_TARGET_SYSTEM == RH_TARGET_SYSTEM_WINDOWS)
		chFind    = '/';
		chReplace = '\\';
	#elif(RH_TARGET_SYSTEM == RH_TARGET_SYSTEM_LINUX)
		chFind    = '\\';
		chReplace = '/';
	#endif

	for(i = 0; i < strlen(pszPath); i++)
	{
		if(pszPath[i] == chFind) pszPath[i] = chReplace;
	}
}

void catdirsep(char *pszPath)
{
	unsigned int i = 0;

	if(pszPath == NULL) return;

	i = strlen(pszPath);

	if(pszPath[i-1] == SZ_DIR_CHAR) return; // Nothing to do

	strcat(pszPath, SZ_DIR_STR);
}

void pathonly(char *pszPath)
{
	unsigned int i = 0;
	bool bReplaced = false;

	if(pszPath == NULL) return;

	i = strlen(pszPath) - 1;
	if(i == (unsigned int)-1) return;
	while(1)
	{
		if(pszPath[i] == SZ_DIR_CHAR)
		{
			pszPath[i] = 0;
			bReplaced = true;
			break;
		}

		i--;
		if(i == (unsigned int)-1) break;
	}

	if(bReplaced == false) pszPath[0] = 0;

	#if(RH_TARGET_SYSTEM == RH_TARGET_SYSTEM_WINDOWS)
		if(strlen(pszPath) == 2) catdirsep(pszPath);
	#endif
}

void fileonly(char *pszPath)
{
	char szTemp[RH_MAX_PATH];
	unsigned int i = 0;
	unsigned int j = 0;

	if(pszPath == NULL) return;

	i = strlen(pszPath) - 1;
	if(i == (unsigned int)-1) return;
	if(i <= 1) return;

	while(1) // Reverse scan for path delimiter
	{
		if(pszPath[i] == SZ_DIR_CHAR) break;
		i--;
		if(i == 0) break;
	}

	if(i == 0) return;

	j = 0;
	i++;
	for( ; i < strlen(pszPath); i++) // Copy only filename to new buffer
	{
		szTemp[j] = pszPath[i];
		j++;
	}
	szTemp[j] = 0;

	strcpy(pszPath, szTemp); // Copy working buffer to return buffer
}

// Is this a <..> or <.> path env descriptor?
bool ispathnav(char *pszPath)
{
	unsigned int i = 0;

	if(pszPath == NULL) return false;

	i = strlen(pszPath);
	if(i == 0) return false;
	if((pszPath[i-1] == '.') && (i == 1)) return true;
	if((pszPath[i-1] == '.') && (pszPath[i-2] == '.') && (i == 2)) return true;
	if((pszPath[i-1] == '.') && (pszPath[i-2] == SZ_DIR_CHAR)) return true;
	if((pszPath[i-1] == '.') && (pszPath[i-2] == '.') && (pszPath[i-3] == SZ_DIR_CHAR)) return true;

	return false;
}

⌨️ 快捷键说明

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