|
|
1.1 root 1:
2: #include <stdio.h>
3: #include <ctype.h>
4: #include <strings.h>
5:
6: main(argc,argv)
7: int argc;
8: char *argv[];
9:
10: {
11:
12: char cmd[1000];
13: char *release;
14: FILE *dirs;
15: FILE *files;
16: FILE *mover;
17: FILE *popen();
18: FILE *script;
19: char dirname[1000];
20: char filename[1000];
21: char fixedname[1000];
22: char fixedpath[1000];
23: char tapename[10];
24: char *scriptname = "UNPACK.COM";
25: char *altscript = "/tmp/UNPACK.COMXXXXXX";
26: char *startname = "AAAAAAAAA";
27: int i;
28: int j;
29: char *k;
30: int pathlen;
31: int dot;
32: int pipeout=0;
33:
34: if(argc < 2) usage();
35: if(*argv[1] == '-') {
36: mover = stdout;
37: pipeout=1;
38: } else {
39: mover = fopen("vmsprep.namelist","w");
40: }
41: strcpy(tapename,startname);
42: if(pipeout) {
43: mktemp(altscript);
44: script = fopen(altscript,"w");
45: } else {
46: script = fopen(scriptname,"w");
47: }
48: for(j=1;j<argc;j++) {
49: if(j==1 && *argv[j]=='-') continue;
50: release = argv[j];
51: strcpy(dirname,release);
52: for(k=index(dirname,'/');k;k=index(k+1,'/')) {
53: *k='\0';
54: fprintf(script,"$ CREATE/DIR [.%s] \n",dirname);
55: strcpy(dirname,release);
56: }
57: sprintf(cmd,
58: "find %s \\! \\( -name RCS -o -name \\*,v -o -name SCCS -o -name s.\\* \\) -type d -print\n", release);
59: dirs = popen(cmd,"r");
60: while(!feof(dirs)) {
61: *dirname = NULL;
62: fscanf(dirs," %s ",dirname);
63: if(*dirname == NULL) continue;
64: for(i=0;i<strlen(dirname);i++) {
65: if(dirname[i]=='/') {
66: dirname[i]='.';
67: } else if (dirname[i]=='.') {
68: dirname[i]='Z';
69: fprintf(stderr,"vmsprep: warning - dot in filename illegal-");
70: fprintf(stderr,"dot replaced by 'Z' %s\n",filename);
71: } else if (!(isalpha(dirname[i]) || isdigit(dirname[i]))) {
72: fprintf(stderr," error: bad character in directory name %s\n",
73: dirname);
74: } else if(islower(dirname[i])) {
75: dirname[i]=toupper(dirname[i]);
76: }
77: }
78: fprintf(script,"$ CREATE/DIR [.%s] \n",dirname);
79: }
80: pclose(dirs);
81:
82: sprintf(cmd,
83: "find %s \\! \\( -name RCS -o -name \\*,v -o -name SCCS -o -name s.\\* \\) -type f -print\n", release);
84: files = popen(cmd,"r");
85: while(!feof(files)) {
86: fscanf(files," %s ",filename);
87: if(*filename == NULL) continue;
88: k = rindex(filename,'/') ;
89: if(k != 0) {
90: pathlen = k - filename;
91: } else {
92: pathlen=0;
93: k = filename - 1;
94: }
95: strncpy(fixedpath,filename,pathlen);
96: fixedpath[pathlen]='\0';
97: strcpy(fixedname,k+1);
98: for(i=0;i<pathlen;i++) {
99: if(fixedpath[i]=='/') {
100: fixedpath[i]='.';
101: } else if (fixedpath[i]=='.') {
102: fixedpath[i]='Z';
103: } else if (!(isalpha(fixedpath[i]) || isdigit(fixedpath[i]))) {
104: fprintf(stderr," error: bad character in file name %s\n",
105: filename);
106: } else if(islower(fixedpath[i])) {
107: fixedpath[i]=toupper(fixedpath[i]);
108: }
109: }
110: for(i=0;i<strlen(fixedname);i++) {
111: if(fixedname[i]=='/') {
112: fixedname[i]='.';
113: } else if (fixedname[i]=='.') {
114: dot++;
115: if(dot != 1) fixedname[i]='Z';
116: } else if (!(isalpha(fixedname[i]) || isdigit(fixedname[i]))) {
117: fprintf(stderr," error: bad character in file name %s\n",
118: filename);
119: fixedname[i]='Z';
120: } else if(islower(fixedname[i])) {
121: fixedname[i]=toupper(fixedname[i]);
122: }
123: }
124: if(dot >1 )
125: fprintf(stderr,"error: too many dots in filename %s \n",
126: fixedname);
127: sprintf(cmd,"%s %s.MOV\n", filename,tapename);
128: fprintf(mover,"%s",cmd);
129: if(*fixedpath != NULL) {
130: fprintf(script,"$ RENAME %s.MOV [.%s]%s%s\n",tapename,fixedpath,
131: fixedname,dot==0?".":"");
132: } else {
133: fprintf(script,"$ RENAME %s.MOV []%s%s\n",tapename,fixedname,
134: dot==0?".":"");
135: }
136: dot=0;
137: bumpname(tapename);
138: }
139: pclose(files);
140: }
141: fclose(script);
142: if(pipeout) fprintf(mover,"%s ",altscript);
143: fprintf(mover,"%s\n",scriptname);
144: fclose(mover);
145: }
146:
147: bumpname(name)
148: char name[10];
149:
150: {
151: int i;
152: for(i=8;i>=0;i--) {
153: name[i]++;
154: if(name[i] > 'Z') {
155: name[i] = 'A';
156: } else {
157: return;
158: }
159: }
160: }
161: usage() {
162: fprintf(stderr,"vmsprep: usage: vmsprep dirname [dirname...] \n");
163: exit();
164: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.