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

📄 sea.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
字号:
/*__________________________________________________________________________
 Copyright (C) 2002 PGP Corporation
 All rights reserved.
 
 $Id: sea.c,v 1.6 2002/08/06 20:09:49 dallen Exp $
__________________________________________________________________________*/
#include "pgpSDACreate.h"
#include "sea.h"

#define NTSIGNATURE(a) ((LPVOID)((BYTE *)a		     +	\
			((PIMAGE_DOS_HEADER)a)->e_lfanew))

FILELIST *ReverseFileList(FILELIST *flin)
{
	FILELIST *flnext,*flout;

	flout=NULL;

	while(flin!=NULL)
	{
		flnext=flin->next;
		
		flin->next=flout;
		flout=flin;

		flin=flnext;
	}

	return (flout);
}

/* Generic event handler */
PGPError
SDAEvents(
	PGPContextRef context,
	SDAEvent *event,
	PGPUserValue userValue
	)
{
	(void) context;

	switch( event->type ) 
	{
		case kSDAEvent_ErrorEvent:
		{	
			SDAEventErrorData *d = &event->data.errorData;
			printf("Error encoding file %s\n",d->fileName);
			break;
		}

		case kSDAEvent_ProgressEvent:
		{	
			SDAEventProgressData *d = &event->data.progressData;
			break;
		}

		case kSDAEvent_NewFileEvent:
		{	
			SDAEventNewFileData *d = &event->data.newfileData;

			printf("Adding %s\n",d->fileName);
			break;
		}

		case kSDAEvent_GetSDARandomBitsEvent:
		{
			SDAEventGetSDARandomBitsData *d = &event->data.randomData;
			break;
		}

		case kSDAEvent_WriteSDAStubEvent:
		{
			DWORD dwStubSize;
			HRSRC hRCStub;
			HGLOBAL hGBStub;
			char *pStubData;
			HMODULE hModule;

			SDAEventWriteSDAStubData *d = &event->data.stubData;

			hModule=GetModuleHandle(NULL);

			hRCStub=FindResource(hModule,
				MAKEINTRESOURCE(IDR_SEASTUB),
				RT_RCDATA);

			dwStubSize=SizeofResource(hModule,hRCStub);

			hGBStub=LoadResource(hModule,hRCStub);
			pStubData=(char *)LockResource(hGBStub);

			// Sanity checking here for resource munging
			if(!((*(USHORT *)pStubData == IMAGE_DOS_SIGNATURE) &&
		      (*(DWORD *)NTSIGNATURE (pStubData) == IMAGE_NT_SIGNATURE)))
			{
				printf("Error: Could not open stub resource.\n");

				return kPGPError_UserAbort;
			}

			// Copy SDA.exe prefix executable into SDA file and
			// set header offset so we can find data again.
			// Write out stub to disk from resources
			fwrite(pStubData,1,dwStubSize,d->fOutput);

			UnlockResource(hGBStub);
			FreeResource(hGBStub);
			break;
		}

		default:
			break;
	}
				
	return kPGPError_NoErr;
}

int main(int argc, char* argv[])
{
	FILE *fout;
	char szOutput[MAX_PATH+1];
	char szDirectory[MAX_PATH+1];
	FILELIST *fl;
	PGPError err;
	struct _stat buf;
	PGPInt32 iresult;
	PGPBoolean bSilent = FALSE;
	
	if((argc < 3) || (argc > 4))
	{
		//usage error
		printf("MakeSEA <output filename> <input directory> <silent>\n");
		return -1;
	}

	if(argc == 4)
	{
		if ((strcmp(argv[3], "silent") != 0) && (strcmp(argv[3], "SILENT") != 0))
		{
			//usage error
			printf("MakeSEA <output filename> <input directory> <silent>\n");
			return -1;
		}
		bSilent = TRUE;
	}

	strcpy(szOutput,argv[1]);
	strcpy(szDirectory,argv[2]);

	iresult = _stat( szDirectory, &buf );

	if (iresult != 0) {
		printf("<input directory> does not exist.\n");
		return -1;
	}

	fout=fopen(szOutput,"wb");

	if(fout==0)
	{
		printf("Could not open output file for writing\n");
		return -1;
	}

	fclose (fout);

	// Get files from directory parameter
	fl=NULL;

	AddToFileList(&fl,szDirectory,NULL);

	fl=ReverseFileList(fl);
	
	if (bSilent) 
	{
		err=SDACreate(NULL,fl,
			szOutput,NULL,
			SDAEvents,NULL,
			SEA_SILENT);
	}
	else
	{
		err=SDACreate(NULL,fl,
			szOutput,NULL,
			SDAEvents,NULL,
			0);
	}

	FreeFileList(fl);

	if(IsPGPError(err))
	{
		remove(szOutput);
	}

	return 0;
}

/*__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 + -