4.4BSD/usr/src/contrib/vmsprep/vmsprep.c

Compare this file to the similar file:
Show the results in this format:


#include <stdio.h>
#include <ctype.h>
#include <strings.h>

main(argc,argv) 
	int argc;
	char *argv[];

{

char cmd[1000];
char *release;
FILE *dirs;
FILE *files;
FILE *mover;
FILE *popen();
FILE *script;
char dirname[1000];
char filename[1000];
char fixedname[1000];
char fixedpath[1000];
char tapename[10];
char *scriptname = "UNPACK.COM";
char *altscript = "/tmp/UNPACK.COMXXXXXX";
char *startname = "AAAAAAAAA";
int i;
int j;
char *k;
int pathlen;
int dot;
int pipeout=0;

	if(argc < 2) usage();
	if(*argv[1] == '-') {
		mover = stdout;
		pipeout=1;
	} else {
		mover = fopen("vmsprep.namelist","w");
	}
	strcpy(tapename,startname);
	if(pipeout) {
		mktemp(altscript);
		script = fopen(altscript,"w");
	} else {
		script = fopen(scriptname,"w");
	}
	fprintf(script,"$ SET NOON\n");
	for(j=1;j<argc;j++) {
		if(j==1 && *argv[j]=='-') continue;
		release = argv[j];
		strcpy(dirname,release);
		for(k=index(dirname,'/');k;k=index(k+1,'/')) {
			*k='\0';
			fprintf(script,"$ CREATE/DIR [.%s] \n",dirname);
			*k='.';
		}
		sprintf(cmd,
			"find %s \\! \\( -name RCS -o -name \\*,v -o -name SCCS -o -name s.\\* \\) -type d -print\n", release);
		dirs = popen(cmd,"r");
		while(!feof(dirs)) {
			*dirname = NULL;
			fscanf(dirs," %s ",dirname);
			if(*dirname == NULL) continue;
			for(i=0;i<strlen(dirname);i++) {
				if(dirname[i]=='/') {
					dirname[i]='.';
				} else if (dirname[i]=='.') {
					dirname[i]='Z';
					fprintf(stderr,"vmsprep: warning - dot in filename illegal-");
					fprintf(stderr,"dot replaced by 'Z' %s\n",filename);
				} else if (!(isalpha(dirname[i]) || isdigit(dirname[i]))) {
					fprintf(stderr," error:  bad character in directory name %s\n",
							dirname);
				} else if(islower(dirname[i])) {
					dirname[i]=toupper(dirname[i]);
				}
			}
			fprintf(script,"$ CREATE/DIR [.%s] \n",dirname);
		}
		pclose(dirs);

		sprintf(cmd,
			"find %s \\! \\( -name RCS -o -name \\*,v -o -name SCCS -o -name s.\\* \\) -type f -print\n", release);
		files = popen(cmd,"r");
		while(!feof(files)) {
			fscanf(files," %s ",filename);
			if(*filename == NULL) continue;
			k = rindex(filename,'/') ;
			if(k != 0) {
				pathlen = k - filename;
			} else {
				pathlen=0;
				k = filename - 1;
			}
			strncpy(fixedpath,filename,pathlen);
			fixedpath[pathlen]='\0';
			strcpy(fixedname,k+1);
			for(i=0;i<pathlen;i++) {
				if(fixedpath[i]=='/') {
					fixedpath[i]='.';
				} else if (fixedpath[i]=='.') {
					fixedpath[i]='Z';
				} else if (!(isalpha(fixedpath[i]) || isdigit(fixedpath[i]))) {
					fprintf(stderr," error:  bad character in file name %s\n",
							filename);
				} else if(islower(fixedpath[i])) {
					fixedpath[i]=toupper(fixedpath[i]);
				}
			}
			dot=0;
			for(i=0;i<strlen(fixedname);i++) {
				if(fixedname[i]=='/') {
					fixedname[i]='.';
				} else if (fixedname[i]=='.') {
					dot++;
					if(dot != 1) fixedname[i]='Z';
				} else if (!(isalpha(fixedname[i]) || isdigit(fixedname[i]))) {
					fprintf(stderr," error:  bad character in file name %s\n",
							filename);
					fixedname[i]='Z';
				} else if(islower(fixedname[i])) {
					fixedname[i]=toupper(fixedname[i]);
				}
			}
			if(dot >1 ) 
				fprintf(stderr,"error:  too many dots in filename %s \n",
					fixedname);
			sprintf(cmd,"%s %s.MOV\n", filename,tapename);
			fprintf(mover,"%s",cmd);
			if(*fixedpath != NULL) {
				fprintf(script,"$ RENAME %s.MOV [.%s]%s%s\n",tapename,fixedpath,
						fixedname,dot==0?".":"");
			} else {
				fprintf(script,"$ RENAME %s.MOV []%s%s\n",tapename,fixedname,
						dot==0?".":"");
			}
			dot=0;
			bumpname(tapename);
		}
	pclose(files);
	}
	fclose(script);
	if(pipeout) fprintf(mover,"%s ",altscript);
	fprintf(mover,"%s\n",scriptname);
	fclose(mover);
	return(0);
}

bumpname(name)
	char name[10];

{
int i;
	for(i=8;i>=0;i--) {
		name[i]++;
		if(name[i] > 'Z') {
			name[i] = 'A';
		} else {
			return;
		}
	}
}
usage() {
	fprintf(stderr,"vmsprep:  usage:  vmsprep dirname [dirname...] \n");
	exit(1);
}