|
|
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: fprintf(script,"$ SET NOON\n");
49: for(j=1;j<argc;j++) {
50: if(j==1 && *argv[j]=='-') continue;
51: release = argv[j];
52: strcpy(dirname,release);
53: for(k=index(dirname,'/');k;k=index(k+1,'/')) {
54: *k='\0';
55: fprintf(script,"$ CREATE/DIR [.%s] \n",dirname);
56: *k='.';
57: }
58: sprintf(cmd,
59: "find %s \\! \\( -name RCS -o -name \\*,v -o -name SCCS -o -name s.\\* \\) -type d -print\n", release);
60: dirs = popen(cmd,"r");
61: while(!feof(dirs)) {
62: *dirname = NULL;
63: fscanf(dirs," %s ",dirname);
64: if(*dirname == NULL) continue;
65: for(i=0;i<strlen(dirname);i++) {
66: if(dirname[i]=='/') {
67: dirname[i]='.';
68: } else if (dirname[i]=='.') {
69: dirname[i]='Z';
70: fprintf(stderr,"vmsprep: warning - dot in filename illegal-");
71: fprintf(stderr,"dot replaced by 'Z' %s\n",filename);
72: } else if (!(isalpha(dirname[i]) || isdigit(dirname[i]))) {
73: fprintf(stderr," error: bad character in directory name %s\n",
74: dirname);
75: } else if(islower(dirname[i])) {
76: dirname[i]=toupper(dirname[i]);
77: }
78: }
79: fprintf(script,"$ CREATE/DIR [.%s] \n",dirname);
80: }
81: pclose(dirs);
82:
83: sprintf(cmd,
84: "find %s \\! \\( -name RCS -o -name \\*,v -o -name SCCS -o -name s.\\* \\) -type f -print\n", release);
85: files = popen(cmd,"r");
86: while(!feof(files)) {
87: fscanf(files," %s ",filename);
88: if(*filename == NULL) continue;
89: k = rindex(filename,'/') ;
90: if(k != 0) {
91: pathlen = k - filename;
92: } else {
93: pathlen=0;
94: k = filename - 1;
95: }
96: strncpy(fixedpath,filename,pathlen);
97: fixedpath[pathlen]='\0';
98: strcpy(fixedname,k+1);
99: for(i=0;i<pathlen;i++) {
100: if(fixedpath[i]=='/') {
101: fixedpath[i]='.';
102: } else if (fixedpath[i]=='.') {
103: fixedpath[i]='Z';
104: } else if (!(isalpha(fixedpath[i]) || isdigit(fixedpath[i]))) {
105: fprintf(stderr," error: bad character in file name %s\n",
106: filename);
107: } else if(islower(fixedpath[i])) {
108: fixedpath[i]=toupper(fixedpath[i]);
109: }
110: }
111: dot=0;
112: for(i=0;i<strlen(fixedname);i++) {
113: if(fixedname[i]=='/') {
114: fixedname[i]='.';
115: } else if (fixedname[i]=='.') {
116: dot++;
117: if(dot != 1) fixedname[i]='Z';
118: } else if (!(isalpha(fixedname[i]) || isdigit(fixedname[i]))) {
119: fprintf(stderr," error: bad character in file name %s\n",
120: filename);
121: fixedname[i]='Z';
122: } else if(islower(fixedname[i])) {
123: fixedname[i]=toupper(fixedname[i]);
124: }
125: }
126: if(dot >1 )
127: fprintf(stderr,"error: too many dots in filename %s \n",
128: fixedname);
129: sprintf(cmd,"%s %s.MOV\n", filename,tapename);
130: fprintf(mover,"%s",cmd);
131: if(*fixedpath != NULL) {
132: fprintf(script,"$ RENAME %s.MOV [.%s]%s%s\n",tapename,fixedpath,
133: fixedname,dot==0?".":"");
134: } else {
135: fprintf(script,"$ RENAME %s.MOV []%s%s\n",tapename,fixedname,
136: dot==0?".":"");
137: }
138: dot=0;
139: bumpname(tapename);
140: }
141: pclose(files);
142: }
143: fclose(script);
144: if(pipeout) fprintf(mover,"%s ",altscript);
145: fprintf(mover,"%s\n",scriptname);
146: fclose(mover);
147: return(0);
148: }
149:
150: bumpname(name)
151: char name[10];
152:
153: {
154: int i;
155: for(i=8;i>=0;i--) {
156: name[i]++;
157: if(name[i] > 'Z') {
158: name[i] = 'A';
159: } else {
160: return;
161: }
162: }
163: }
164: usage() {
165: fprintf(stderr,"vmsprep: usage: vmsprep dirname [dirname...] \n");
166: exit(1);
167: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.