131969Sbostic 231969Sbostic #include <stdio.h> 331969Sbostic #include <ctype.h> 431969Sbostic #include <strings.h> 531969Sbostic 631969Sbostic main(argc,argv) 731969Sbostic int argc; 831969Sbostic char *argv[]; 931969Sbostic 1031969Sbostic { 1131969Sbostic 1231969Sbostic char cmd[1000]; 1331969Sbostic char *release; 1431969Sbostic FILE *dirs; 1531969Sbostic FILE *files; 1631969Sbostic FILE *mover; 1731969Sbostic FILE *popen(); 1831969Sbostic FILE *script; 1931969Sbostic char dirname[1000]; 2031969Sbostic char filename[1000]; 2131969Sbostic char fixedname[1000]; 2231969Sbostic char fixedpath[1000]; 2331969Sbostic char tapename[10]; 2431969Sbostic char *scriptname = "UNPACK.COM"; 2531969Sbostic char *altscript = "/tmp/UNPACK.COMXXXXXX"; 2631969Sbostic char *startname = "AAAAAAAAA"; 2731969Sbostic int i; 2831969Sbostic int j; 2931969Sbostic char *k; 3031969Sbostic int pathlen; 3131969Sbostic int dot; 3231969Sbostic int pipeout=0; 3331969Sbostic 3431969Sbostic if(argc < 2) usage(); 3531969Sbostic if(*argv[1] == '-') { 3631969Sbostic mover = stdout; 3731969Sbostic pipeout=1; 3831969Sbostic } else { 3931969Sbostic mover = fopen("vmsprep.namelist","w"); 4031969Sbostic } 4131969Sbostic strcpy(tapename,startname); 4231969Sbostic if(pipeout) { 4331969Sbostic mktemp(altscript); 4431969Sbostic script = fopen(altscript,"w"); 4531969Sbostic } else { 4631969Sbostic script = fopen(scriptname,"w"); 4731969Sbostic } 4832061Sbostic fprintf(script,"$ SET NOON\n"); 4931969Sbostic for(j=1;j<argc;j++) { 5031969Sbostic if(j==1 && *argv[j]=='-') continue; 5131969Sbostic release = argv[j]; 5231969Sbostic strcpy(dirname,release); 5331969Sbostic for(k=index(dirname,'/');k;k=index(k+1,'/')) { 5431969Sbostic *k='\0'; 5531969Sbostic fprintf(script,"$ CREATE/DIR [.%s] \n",dirname); 5632061Sbostic *k='.'; 5731969Sbostic } 5831969Sbostic sprintf(cmd, 5931969Sbostic "find %s \\! \\( -name RCS -o -name \\*,v -o -name SCCS -o -name s.\\* \\) -type d -print\n", release); 6031969Sbostic dirs = popen(cmd,"r"); 6131969Sbostic while(!feof(dirs)) { 6231969Sbostic *dirname = NULL; 6331969Sbostic fscanf(dirs," %s ",dirname); 6431969Sbostic if(*dirname == NULL) continue; 6531969Sbostic for(i=0;i<strlen(dirname);i++) { 6631969Sbostic if(dirname[i]=='/') { 6731969Sbostic dirname[i]='.'; 6831969Sbostic } else if (dirname[i]=='.') { 6931969Sbostic dirname[i]='Z'; 7031969Sbostic fprintf(stderr,"vmsprep: warning - dot in filename illegal-"); 7131969Sbostic fprintf(stderr,"dot replaced by 'Z' %s\n",filename); 7231969Sbostic } else if (!(isalpha(dirname[i]) || isdigit(dirname[i]))) { 7331969Sbostic fprintf(stderr," error: bad character in directory name %s\n", 7431969Sbostic dirname); 7531969Sbostic } else if(islower(dirname[i])) { 7631969Sbostic dirname[i]=toupper(dirname[i]); 7731969Sbostic } 7831969Sbostic } 7931969Sbostic fprintf(script,"$ CREATE/DIR [.%s] \n",dirname); 8031969Sbostic } 8131969Sbostic pclose(dirs); 8231969Sbostic 8331969Sbostic sprintf(cmd, 8431969Sbostic "find %s \\! \\( -name RCS -o -name \\*,v -o -name SCCS -o -name s.\\* \\) -type f -print\n", release); 8531969Sbostic files = popen(cmd,"r"); 8631969Sbostic while(!feof(files)) { 8731969Sbostic fscanf(files," %s ",filename); 8831969Sbostic if(*filename == NULL) continue; 8931969Sbostic k = rindex(filename,'/') ; 9031969Sbostic if(k != 0) { 9131969Sbostic pathlen = k - filename; 9231969Sbostic } else { 9331969Sbostic pathlen=0; 9431969Sbostic k = filename - 1; 9531969Sbostic } 9631969Sbostic strncpy(fixedpath,filename,pathlen); 9731969Sbostic fixedpath[pathlen]='\0'; 9831969Sbostic strcpy(fixedname,k+1); 9931969Sbostic for(i=0;i<pathlen;i++) { 10031969Sbostic if(fixedpath[i]=='/') { 10131969Sbostic fixedpath[i]='.'; 10231969Sbostic } else if (fixedpath[i]=='.') { 10331969Sbostic fixedpath[i]='Z'; 10431969Sbostic } else if (!(isalpha(fixedpath[i]) || isdigit(fixedpath[i]))) { 10531969Sbostic fprintf(stderr," error: bad character in file name %s\n", 10631969Sbostic filename); 10731969Sbostic } else if(islower(fixedpath[i])) { 10831969Sbostic fixedpath[i]=toupper(fixedpath[i]); 10931969Sbostic } 11031969Sbostic } 11131969Sbostic for(i=0;i<strlen(fixedname);i++) { 11231969Sbostic if(fixedname[i]=='/') { 11331969Sbostic fixedname[i]='.'; 11431969Sbostic } else if (fixedname[i]=='.') { 11531969Sbostic dot++; 11631969Sbostic if(dot != 1) fixedname[i]='Z'; 11731969Sbostic } else if (!(isalpha(fixedname[i]) || isdigit(fixedname[i]))) { 11831969Sbostic fprintf(stderr," error: bad character in file name %s\n", 11931969Sbostic filename); 12031969Sbostic fixedname[i]='Z'; 12131969Sbostic } else if(islower(fixedname[i])) { 12231969Sbostic fixedname[i]=toupper(fixedname[i]); 12331969Sbostic } 12431969Sbostic } 12531969Sbostic if(dot >1 ) 12631969Sbostic fprintf(stderr,"error: too many dots in filename %s \n", 12731969Sbostic fixedname); 12831969Sbostic sprintf(cmd,"%s %s.MOV\n", filename,tapename); 12931969Sbostic fprintf(mover,"%s",cmd); 13031969Sbostic if(*fixedpath != NULL) { 13131969Sbostic fprintf(script,"$ RENAME %s.MOV [.%s]%s%s\n",tapename,fixedpath, 13231969Sbostic fixedname,dot==0?".":""); 13331969Sbostic } else { 13431969Sbostic fprintf(script,"$ RENAME %s.MOV []%s%s\n",tapename,fixedname, 13531969Sbostic dot==0?".":""); 13631969Sbostic } 13731969Sbostic dot=0; 13831969Sbostic bumpname(tapename); 13931969Sbostic } 14031969Sbostic pclose(files); 14131969Sbostic } 14231969Sbostic fclose(script); 14331969Sbostic if(pipeout) fprintf(mover,"%s ",altscript); 14431969Sbostic fprintf(mover,"%s\n",scriptname); 14531969Sbostic fclose(mover); 146*32594Sbostic return(0); 14731969Sbostic } 14831969Sbostic 14931969Sbostic bumpname(name) 15031969Sbostic char name[10]; 15131969Sbostic 15231969Sbostic { 15331969Sbostic int i; 15431969Sbostic for(i=8;i>=0;i--) { 15531969Sbostic name[i]++; 15631969Sbostic if(name[i] > 'Z') { 15731969Sbostic name[i] = 'A'; 15831969Sbostic } else { 15931969Sbostic return; 16031969Sbostic } 16131969Sbostic } 16231969Sbostic } 16331969Sbostic usage() { 16431969Sbostic fprintf(stderr,"vmsprep: usage: vmsprep dirname [dirname...] \n"); 165*32594Sbostic exit(1); 16631969Sbostic } 167