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

📄 tools.cpp

📁 DVB-S的softcam源代码
💻 CPP
字号:
/* * tools.c: Various tools * * See the main source file 'vdr.c' for copyright information and * how to reach the author. * * $Id: tools.c 1.103 2005/11/04 16:33:18 kls Exp $ */#include "..\stdafx.h"#include <ctype.h>#include <string.h>#include <stdlib.h>#include "..\asprintf.h"#include "tools.h"char *skipspace(const char *s){	while (*s && isspace(*s))		s++;	return (char *)s;}char *stripspace(char *s){	if (s && *s) {		for (char *p = s + strlen(s) - 1; p >= s; p--) {			if (!isspace(*p))				break;			*p = 0;		}	}	return s;}cString AddDirectory(const char *DirName, const char *FileName){	char *buf;	asprintf(&buf, "%s\\%s", DirName && *DirName ? DirName : ".", FileName);	return cString(buf, true);}char *ReadLink(const char *FileName){	char RealName[_MAX_PATH];	const char *TargetName = NULL;	int n = readlink(FileName, RealName, sizeof(RealName) - 1);	if (n < 0) {		if (errno == ENOENT || errno == EINVAL) // file doesn't exist or is not a symlink			TargetName = FileName;		else // some other error occurred			printf("ERROR: $s\n",FileName);	}	else if (n < int(sizeof(RealName))) { // got it!		RealName[n] = 0;		TargetName = RealName;	}	else		printf("ERROR: symlink's target name too long: %s\n", FileName);	return TargetName ? _strdup(TargetName) : NULL;}// --- cTimeMs ---------------------------------------------------------------cTimeMs::cTimeMs(void){	Set();}uint64 cTimeMs::Now(void){	struct timeval t;	if (gettimeofday(&t, NULL) == 0)		return (uint64(t.tv_sec)) * 1000 + t.tv_usec / 1000;	return 0;}void cTimeMs::Set(int Ms){	begin = Now() + Ms;}bool cTimeMs::TimedOut(void){	return Now() >= begin;}uint64 cTimeMs::Elapsed(void){	return Now() - begin;}// --- cString ---------------------------------------------------------------cString::cString(const char *S, bool TakePointer){	s = TakePointer ? (char *)S : S ? _strdup(S) : NULL;}cString::~cString(){	free(s);}cString cString::sprintf(const char *fmt, ...){	va_list ap;	va_start(ap, fmt);	char *buffer;	vasprintf(&buffer, fmt, ap);	return cString(buffer, true);}// --- cSafeFile -------------------------------------------------------------cSafeFile::cSafeFile(const char *FileName){	f = NULL;	fileName = ReadLink(FileName);	tempName = fileName ? MALLOC(char, strlen(fileName) + 5) : NULL;	if (tempName)		strcat(strcpy(tempName, fileName), ".$$$");}cSafeFile::~cSafeFile(){	if (f)		fclose(f);	_unlink(tempName);	free(fileName);	free(tempName);}bool cSafeFile::Open(void){	if (!f && fileName && tempName) {		f = fopen(tempName, "w");		if (!f)			printf("ERROR: %s\n",tempName);	}	return f != NULL;}bool cSafeFile::Close(void){	bool result = true;	if (f) {		if (ferror(f) != 0) {			printf("ERROR: %s\n",tempName);			result = false;		}		if (fclose(f) < 0) {			printf("ERROR: %s\n",tempName);			result = false;		}		f = NULL;		if (result && MoveFileEx(tempName, fileName, MOVEFILE_REPLACE_EXISTING) < 0) {			printf("ERROR: %s\n",fileName);			result = false;		}	}	else		result = false;	return result;}// --- cListObject -----------------------------------------------------------cListObject::cListObject(void){  prev = next = NULL;}cListObject::~cListObject(){}void cListObject::Append(cListObject *Object){	next = Object;	Object->prev = this;}void cListObject::Insert(cListObject *Object){	prev = Object;	Object->next = this;}void cListObject::Unlink(void){	if (next)		next->prev = prev;	if (prev)		prev->next = next;	next = prev = NULL;}// --- cListBase -------------------------------------------------------------cListBase::cListBase(void){   objects = lastObject = NULL;  count = 0;}cListBase::~cListBase(){  Clear();}void cListBase::Add(cListObject *Object, cListObject *After){	if (After && After != lastObject) {		After->Next()->Insert(Object);		After->Append(Object);	}	else {		if (lastObject)			lastObject->Append(Object);		else			objects = Object;		lastObject = Object;	}	count++;}void cListBase::Del(cListObject *Object, bool DeleteObject){	if (Object == objects)		objects = Object->Next();	if (Object == lastObject)		lastObject = Object->Prev();	Object->Unlink();	if (DeleteObject)		delete Object;	count--;}void cListBase::Clear(void){  while (objects) {        cListObject *object = objects->Next();        delete objects;        objects = object;        }  objects = lastObject = NULL;  count = 0;}cListObject *cListBase::Get(int Index) const{	if (Index < 0)		return NULL;	cListObject *object = objects;	while (object && Index-- > 0)		object = object->Next();	return object;}

⌨️ 快捷键说明

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