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

📄 sdautil.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
字号:
/*__________________________________________________________________________
 Copyright (C) 2002 PGP Corporation
 All rights reserved.
 
 $Id: sdautil.c,v 1.11 2002/10/19 00:18:59 wjb Exp $
__________________________________________________________________________*/

#include "DecodeStub.h"
#include "tchar.h"

/*
//	______________________________________
//
//	Thread routine to delay and then open URL.
//	If we don't wait for calling dialog box to
//	close, browser will be launched and then forced
//	to background as parent window of calling
//	dialog box is activated.

#define THREAD_DELAY_MS	150

DWORD WINAPI
ExecuteShellThread (LPVOID lpvoid) 
{
	LPSTR pszURL;
	pszURL = (LPSTR)lpvoid;

	// delay to allow calling dialog box to close
	// and activate parent
	Sleep (THREAD_DELAY_MS);

	// now that parent is active, open the URL
	if ((ULONG)ShellExecute (NULL, "open", pszURL, NULL, 
				  "C:\\", SW_SHOWNORMAL) <= 32) 
	{
		; // Don't worry about it for now
	}

	free (pszURL);

	return 0;
}

//	_______________________________________________
//
//	launch web browser with specified link

PGPError 
PGPsdaWebBrowse (LPSTR pszURL)
{
	DWORD	dwThreadID;
	LPSTR	pszURLbuffer;

	if (!pszURL) return kPGPError_BadParams;

	pszURLbuffer = malloc (lstrlen(pszURL) +1);
	lstrcpy (pszURLbuffer, pszURL);

	CreateThread (NULL, 0, ExecuteShellThread, 
			(LPVOID)pszURLbuffer, 0, &dwThreadID);

	return kPGPError_NoErr;
}
*/
void GetPrefixPath(char *szPrefixPath)
{
	char *p;

	GetModuleFileName(NULL,szPrefixPath, MAX_PATH);

	p=strrchr(szPrefixPath,'\\');

	if(p!=NULL)
	{
		p++;
		*p=0;
	}
	else
	{
		strcpy(szPrefixPath,"");
	}
}

BOOL DoFileSave (HWND hWnd,TCHAR *wszTitle,TCHAR *wszFilename,BOOL bForce)
{
	TCHAR *p;
	BOOL bRst;
	OPENFILENAME SaveFileName;
	HANDLE *hFile;
	TCHAR StrRes[500];
	BOOL bAskUser,bRetry,bAddDefault;
	TCHAR DefaultExtension[MAX_PATH];
	int FileStart,FileExtensionStart;

	bAskUser=bForce;

	do
	{
		FileStart=FileExtensionStart=0;
		bRetry=FALSE;
		bRst=TRUE;
		_tcscpy(DefaultExtension,TEXT("\0"));

		if((p = _tcsrchr(wszFilename, (TCHAR)'\\')))
		{
			p++;
			FileStart = p - wszFilename;
		}

		if((p = _tcsrchr(wszFilename, (TCHAR)'.')))
		{
			p++;

			FileExtensionStart = p - wszFilename;
			_tcscpy(DefaultExtension,p); // Save old extension
									// it might get stripped
		}

		// Ask the user
		if(bAskUser)
		{
			memset (&SaveFileName, 0x00, sizeof (OPENFILENAME));

			LoadString (g_hinst, IDS_SAVEFILTER, StrRes, sizeof(StrRes));
			while (p = _tcsrchr (StrRes, '@')) *p = '\0';

			SaveFileName.lStructSize=sizeof(SaveFileName); 
			SaveFileName.hwndOwner=hWnd; 
			SaveFileName.hInstance=NULL; 
			SaveFileName.lpstrFilter=StrRes;
			SaveFileName.lpstrCustomFilter=NULL; 
			SaveFileName.nMaxCustFilter=0; 
			SaveFileName.nFilterIndex=1; 
  			SaveFileName.lpstrFile=wszFilename; 
			SaveFileName.nMaxFile=MAX_PATH; 
			SaveFileName.lpstrFileTitle=NULL; 
			SaveFileName.nMaxFileTitle=0; 
			SaveFileName.lpstrInitialDir=NULL; 
			SaveFileName.lpstrTitle=wszTitle; 
			SaveFileName.Flags= OFN_HIDEREADONLY|OFN_NOCHANGEDIR;
			SaveFileName.nFileOffset=FileStart; 
			SaveFileName.nFileExtension=FileExtensionStart; 
			SaveFileName.lpstrDefExt=DefaultExtension; 
			SaveFileName.lCustData=(long)NULL; 
			SaveFileName.lpfnHook=NULL;
			SaveFileName.lpTemplateName=NULL; 

			bRst = GetSaveFileName(&SaveFileName);
		}

		if(bRst)
		{
			// We'll likely always have some kind of extension
			if(DefaultExtension[0]!=0)
			{
				bAddDefault=FALSE;

				p = _tcsrchr(wszFilename, '.');

				if(p)
				{
					p++;

					// Extension found
					if(!_tcsicmp(DefaultExtension,p))
					{
						// They are the same. Woohoo! Do nothing
						bAddDefault=FALSE;
					}
					else
					{
						bAddDefault=TRUE;
					}
				}
				else
				{
					bAddDefault=TRUE;
				}

				if(bAddDefault)
				{
					int lastone;
					BOOL bDot;

					// They are different. Must be that 
					// pesky hide extensions option.
					lastone=_tcslen(wszFilename)-1;
					bDot=FALSE;

					if(lastone>=0)
					{
						if(wszFilename[lastone]==L'.')
							bDot=TRUE;
					}

					if(!bDot)
						_tcscat(wszFilename,TEXT("."));
					_tcscat(wszFilename,DefaultExtension);
				}
			}

			hFile=CreateFile (wszFilename, GENERIC_READ,
				0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

			// If we could open the file, we need to ask the user
			if(hFile!=INVALID_HANDLE_VALUE)
			{
				CloseHandle(hFile);

				if(!bAskUser)
				{
					// If we haven't asked, don't error out just yet. Show dlg
					bAskUser=bRetry=TRUE;
					continue;
				}
				else
				{
					// We've been here before. Error before doing anything
					if(IDCANCEL==MessageBox(hWnd,
						wszFilename,TEXT("File exists. Overwrite it?"),
						MB_OKCANCEL|MB_ICONSTOP|MB_SETFOREGROUND))
					{
						// Do over
						bAskUser=bRetry=TRUE;
						continue;
					}
				}

				// File doesn't exist, but can we create it?
				hFile=CreateFile (wszFilename, GENERIC_READ|GENERIC_WRITE,
					0, NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

				if(hFile==INVALID_HANDLE_VALUE)
				{
					if(!bAskUser)
					{
						// Couldn't create it, but don't error out yet. Dlg.
						bAskUser=bRetry=TRUE;
						continue;
					}
					else
					{
						// Been here before. Show error and do over
						MessageBox(hWnd,
							wszFilename,TEXT("Could not write to file!"),
							MB_OK|MB_ICONSTOP|MB_SETFOREGROUND);
						bAskUser=bRetry=TRUE;
						continue;
					}
				}
				else
				{
					// We can create the file. Close it and erase it
					CloseHandle(hFile);
					DeleteFile(wszFilename);
					// Should be done after this!
				}
			}
		}
	} while(bRetry);

	return(bRst);
}

BOOL  SaveOutputFile(HWND hwnd, 
					 char *Title,
					 char *InputFile, 
					 char *OutputFile)
{
	BOOL bOK;

	strcpy(OutputFile,InputFile);

	bOK=DoFileSave(hwnd,Title,OutputFile,FALSE);

	return(!bOK); // TRUE if user Cancels
}

/*__Editor_settings____

	Local Variables:
	tab-width: 4
	End:
	vi: ts=4 sw=4
	vim: si
_____________________*/

⌨️ 快捷键说明

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