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