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: }