📄 sdautil.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 + -