|
|
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.