added field name q_ruser; need to update NullAddress
[unix-history] / usr / src / contrib / vmsprep / vmsprep.c
CommitLineData
16f6747c
KB
1
2#include <stdio.h>
3#include <ctype.h>
4#include <strings.h>
5
6main(argc,argv)
7 int argc;
8 char *argv[];
9
10{
11
12char cmd[1000];
13char *release;
14FILE *dirs;
15FILE *files;
16FILE *mover;
17FILE *popen();
18FILE *script;
19char dirname[1000];
20char filename[1000];
21char fixedname[1000];
22char fixedpath[1000];
23char tapename[10];
24char *scriptname = "UNPACK.COM";
25char *altscript = "/tmp/UNPACK.COMXXXXXX";
26char *startname = "AAAAAAAAA";
27int i;
28int j;
29char *k;
30int pathlen;
31int dot;
32int 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 }
6f9fd6dc 48 fprintf(script,"$ SET NOON\n");
16f6747c
KB
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);
6f9fd6dc 56 *k='.';
16f6747c
KB
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 }
8e95df0b 111 dot=0;
16f6747c
KB
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);
48ef1da8 147 return(0);
16f6747c
KB
148}
149
150bumpname(name)
151 char name[10];
152
153{
154int 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}
164usage() {
165 fprintf(stderr,"vmsprep: usage: vmsprep dirname [dirname...] \n");
48ef1da8 166 exit(1);
16f6747c 167}