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

📄 main.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	{
		printf("\n  Original Exec Stats:   \"%s\", %s-style, %d bytes\n", oldfilename, execstyle[Exec_Type-1], oldfilesize);
		printf("Compressed Exec Stats:   \"%s\", %s-style, %d bytes   (%1.1f%%)\n", newfilename, execstyle[2], newfilesize, (float)(newfilesize+0.01)/(float)(oldfilesize+0.01) *100);
	}
	else
	{
		if(!silent) printf("SC/32A: File \"%s\" has been successfully compressed\n", oldfilename);
	}
	exit(0);
}




/****************************************************************************/
void CompressExec()
{
	int n;

	CreateTemp();
	CreateLCHeader();
	CreateLCObjects();
	CreateLCFixups();
	AppendTitleFile();
	close_temp();
	unlink(tempname1);
}


/****************************************************************************/
void CreateLCHeader()
{
	int n;

	Print("+ Creating LC Header :   ");
	n=create_lc_header();
	if(n!=0)
	{
		Print("Error!     \n");
		if(n==-1) err_seek(tempname1);
		if(n==-2) err_read(tempname1);
		if(n==-3) err_write(tempname2);
		if(n==-4) err_linker(tempname1);
		if(n==-5) err_objects(tempname1);
	} else
	if(!verbose) Print("Ok.\n");
	else	     Print("Ok.  (%d Objects)\n",app_num_objects);
}


void CreateLCObjects()
{
	int n;
	int obj;
	char c;

	for(obj=1; obj<=app_num_objects; obj++)
	{
		Print("+ Encoding Object #%-2d:   ",obj);

		n=create_lc_object(obj);
		if(n!=0)
		{
			Print("Error!     \n");
			if(n==-1) err_seek(tempname1);
			if(n==-2) err_read(tempname1);
			if(n==-3) err_mem();
			if(n==-4) err_write(tempname2);
			if(n==-5) err_lcobjhdr(tempname1);
		}

		c = app_obj_seekattr[obj] ? '*':' ';

		if(!quiet)
		{
			printf("[鸧  ");
			if(!verbose) printf("(%1.1f%%)\n", ((float)(obj_new_size+0.01)/(float)(obj_old_size+0.01))*100);
			else
			{	  		 printf("Old=%7d,   New=%7d,   (%1.1f%%)  (%s)%c\n", obj_old_size,obj_new_size, ((float)(obj_new_size+0.01)/(float)(obj_old_size+0.01))*100, encodetype[app_enc_status], c);
			if(verbxtra) printf("                               ** %s **,   ** %s **,   %7d - fixups\n", app_obj_iscode ? "CODE":"DATA", app_obj_is32bit ? "32bit":"16bit", app_obj_seekattr[obj]);
			}
		}
	}
}


void CreateLCFixups()
{
	int n;

	Print("+ Encoding LC Fixups :   ");
	n=create_lc_fixups();
	if(n!=0)
	{
		Print("Error!\n");
		if(n==-1) err_seek(tempname1);
		if(n==-2) err_read(tempname1);
		if(n==-3) err_mem();
		if(n==-4) err_write(tempname2);
	}

	if(quiet!=TRUE)
	{
		printf("[鸧  ");
		if(!verbose) printf("(%1.1f%%)\n", ((float)(obj_new_size+0.01)/(float)(obj_old_size+0.01))*100);
		else	     printf("Old=%7d,   New=%7d,   (%1.1f%%)  (%s)\n", obj_old_size,obj_new_size, ((float)(obj_new_size+0.01)/(float)(obj_old_size+0.01))*100, encodetype[app_enc_status]);
	}
}










/****************************************************************************/
void UnbindExec()
{
	int n;

	char temppath[128];		// passed as *path argument
	char tempname[128];		// passed as *argv[0]
	char tempparm[128];		// name of file to be processed

	const char *path=temppath;
	const char *arg0=bindname;
	const char *arg1="/U";
	const char *arg2="/O";
	const char *arg3="/S";
	const char *arg4=tempparm;
	const char *arg5=oldfilename;


	strcpy(temppath,bindname);
	strcpy(tempname,bindname);
	strcpy(tempparm,"/UN");
	strcat(tempparm,tempname1);
	n=spawnle(P_WAIT, path, arg0,arg1,arg2,arg3,arg4,arg5, NULL, NULL);

	if(n==-1)
	{
	  GetDOS32APath();
	  strcpy(temppath,dos32apath);
	  strcat(temppath,bindname);
	  strcpy(tempname,dos32apath);
	  strcat(tempname,bindname);
	  n=spawnle(P_WAIT, path, arg0,arg1,arg2,arg3,arg4,arg5, NULL, NULL);
	  if(n==-1)
	  {
	    strcpy(temppath,bindname);
	    strcpy(tempname,bindname);
	    n=spawnlpe(P_WAIT, path, arg0,arg1,arg2,arg3,arg4,arg5, NULL, NULL);
	    if(n==-1) err_nosb();
	  }
	}
	if(n!=0)
	{
	  if(n==127) err_support(oldfilename);
	  else {
	    DeleteTempFiles();
	    exit(1);
	  }
	}
}

/****************************************************************************/
void BindExec() {
	int n;

	char temppath[128];		// passed as *path argument
	char tempname[128];		// passed as *argv[0]
	char tempparm[128];		// -UN name of file
	char tempparm2[128];		// -BN name of file
	char temptype[8];		// action type, either "-R" or "-RS"

	const char *path=temppath;
	const char *arg0=bindname;
	const char *arg1=temptype;
	const char *arg2="/S";
	const char *arg3=tempparm;
	const char *arg4=tempparm2;
	const char *arg5=tempname2;


	if(bindtype==0) 	strcpy(temptype,"/R");
	else if(bindtype==1)	strcpy(temptype,"/RS");
	else if(bindtype==2)	strcpy(temptype,"/RC");

	strcpy(temppath,bindname);
	strcpy(tempname,bindname);

	strcpy(tempparm,"/UN");
	strcat(tempparm,tempname2);
	strcpy(tempparm2,"/BN");
	strcat(tempparm2,newfilename);
	n=spawnle(P_WAIT, path, arg0,arg1,arg2,arg3,arg4,arg5, NULL, NULL);

	if(n==-1)
	{
	  GetDOS32APath();
	  strcpy(temppath,dos32apath);
	  strcat(temppath,bindname);
	  strcpy(tempname,dos32apath);
	  strcat(tempname,bindname);
	  n=spawnle(P_WAIT, path, arg0,arg1,arg2,arg3,arg4,arg5, NULL, NULL);
	  if(n==-1)
	  {
	    strcpy(temppath,bindname);
	    strcpy(tempname,bindname);
	    n=spawnlpe(P_WAIT, path, arg0,arg1,arg2,arg3,arg4,arg5, NULL, NULL);
	    if(n==-1) err_nosb();
	  }
	}
	if(n!=0) {
	  if(n==127) err_support(tempname2);
	  else {
	    DeleteTempFiles();
	    exit(1);
	  }
	}
}


/****************************************************************************/
void Print(char *format, ...)
{
	va_list arglist;
	char buffer[1024];
	if(quiet==FALSE)
	{
		va_start(arglist,format);
		vsprintf(buffer,format,arglist);
		printf(buffer);
		va_end(arglist);
	}
}
int GetFileSize(char *name)
{
	int n,m;
	if( (n=open(name,O_RDONLY | O_BINARY)) == -1) return(0);
	m=filelength(n);
	close(n);
	return(m);
}
void GetDOS32APath()
{
	char *ptr;
	char *envname;
	char envbuf[512];

	dos32apath[0]=NULL;
	envname=getenv("DOS32A");
	if(envname!=0)
	{
	  ptr=strchr(envname,' ');
	  if(ptr==NULL) ptr=strchr(envname,0);
	  memset(envbuf,0,256);
	  strncpy(envbuf,envname,(dword)ptr-(dword)envname);
	  strcat(envbuf,"\\BINW\\");
	  strcpy(dos32apath,envbuf);
	}
}
void CreateD32AEnvVar()
{
	int n;
	char *envname;

	envname=getenv("DOS32A");
	if(envname!=0)
	{
		strcpy(dos32aenv,envname);
		strcat(dos32aenv," /NOC");
	}
	else	strcpy(dos32aenv," /NOC");
	n=setenv("DOS32A",dos32aenv,1);
//	if(n!=0) Print("WARNING: could not adjust DOS32A environment variable\n");
}
void DeleteTempFiles()
{
	close_temp();
	close_exec();
	unlink(tempname1);
	unlink(tempname2);
}
void ShowCount(int count)
{
	if(quiet!=TRUE) if(nocount!=TRUE) printf("%02d%%\b\b\b",count);
}
void CopyFile(char *f1, char *f2) {
	int c;
	FILE *src;
	FILE *dest;
	unlink(f2);
	if((src=fopen(f1,"rb"))!=NULL)
	{
		if((dest=fopen(f2,"wb"))!=NULL)
		{
			while((c=fgetc(src))!=EOF) fputc(c,dest);
			fclose(dest);
		}
	fclose(src);
	}
}
void CheckExec(char *argv[])
{
	char *bufptr;

	strcpy(oldfilename,argv[execargn]);
	strcpy(newfilename,argv[execargn]);
	bufptr=(char *)strchr(newfilename,'.');
	if(bufptr!=NULL) strset(bufptr,0);
	if(bind==TRUE)	strcat(newfilename,".exe");
	else		strcat(newfilename,".lc");

	if(CheckIfExists(oldfilename)==TRUE) return;
	bufptr=(char *)strchr(oldfilename,'.');
	if(bufptr!=NULL) return;
	strcat(oldfilename,".exe");

	if(CheckIfExists(oldfilename)==TRUE) return;
	bufptr=(char *)strchr(oldfilename,'.');
	if(bufptr!=NULL) strset(bufptr,0);
	strcat(oldfilename,".le");

	if(CheckIfExists(oldfilename)==TRUE) return;
	bufptr=(char *)strchr(oldfilename,'.');
	if(bufptr!=NULL) strset(bufptr,0);
	strcat(oldfilename,".lx");

	if(CheckIfExists(oldfilename)==TRUE) return;
	strcpy(oldfilename,argv[execargn]);
}
int CheckIfExists(char *name)
{
	int n;
	n=open(name,O_RDWR | O_BINARY);
	if(n!=-1) { close(n); return(TRUE); }
	return(FALSE);
}
void CheckEnvironment()
{
	if(getenv("DOS32A")==NULL) err_environment();
}

void copy_file(char *f1, char *f2)
{
	int c;
	FILE *src;
	FILE *dest;

	if( (f1[1] != ':') && (f2[1] != ':') )
	{
		rename(f1,f2);
		return;
	}

	if((src=fopen(f1,"rb"))!=NULL)
	{
		if((dest=fopen(f2,"wb"))!=NULL)
		{
			while((c=fgetc(src))!=EOF) fputc(c,dest);
			fclose(dest);
		}
		fclose(src);
	}
}

void AppendTitleFile()
{

	int n,m,k;
	char *ptr;
	char *dirptr;
	char tempbuf[512];

	dirptr=inffilename-1;
	strcpy(inffilename,oldfilename);
	for(ptr=inffilename; *ptr!=0; ptr++) if(*ptr=='\\') dirptr=ptr;

	*(dirptr+1)=0;
	strcat(inffilename,titlename);

	m=GetFileSize(inffilename);
	if(m==0 || m>512) return;

	if( (n=open(inffilename,O_RDONLY | O_BINARY)) != -1)
	{
		k=0;
		Print("+ Appending OEM Info :   ");
		memset(tempbuf,0,512);
		if(read(n,&tempbuf,m) == -1) k++;
		if(write_oem_to_temp(temp_handle,&tempbuf,m+1) == -1) k++;
		if(k==0)
		{
			Print("Ok.");
			if(verbose) Print("  (%d bytes)",m);
			Print("\n");
		} else	Print("Error!\n");
		close(n);
	}
}

⌨️ 快捷键说明

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