home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
files
/
diskutil
/
mtools
/
mkmanife.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-05
|
2KB
|
122 lines
/*
* A program to create a manifest (shiping list) that is a shell script
* to return a Unix file name to it's original state after it has been
* clobbered by MSDOS's file name restrictions.
*
* This code also used in arc, mtools, and pcomm
*/
#ifdef BSD
#define strrchr rindex
#endif /* BSD */
#include <stdio.h>
#include <ctype.h>
main(argc, argv)
int argc;
char *argv[];
{
int i;
char *name, *new_name, *dos_name(), *strrchr();
void exit();
if (argc == 1) {
fprintf(stderr, "Usage: mkmanifest <list-of-files>\n");
exit(1);
}
for (i=1; i<argc; i++) {
/* zap the leading path */
if (name = strrchr(argv[i], '/'))
name++;
else
name = argv[i];
/* create new name */
new_name = dos_name(name);
if (strcmp(new_name, name))
printf("mv %s %s\n", new_name, name);
}
exit(0);
}
char *
dos_name(name)
char *name;
{
static char *dev[9] = {"con", "aux", "com1", "com2", "lpt1", "prn",
"lpt2", "lpt3", "nul"};
char *s, *temp, *ext, *strcpy(), *strpbrk(), *strcat();
char buf[15];
int i, dot;
static char ans[13];
strcpy(buf, name);
temp = buf;
/* separate the name from extention */
ext = "";
dot = 0;
for (i=strlen(buf)-1; i>=0; i--) {
if (buf[i] == '.' && !dot) {
dot = 1;
buf[i] = '\0';
ext = &buf[i+1];
}
if (isupper(buf[i]))
buf[i] = tolower(buf[i]);
}
/* if no name */
if (*temp == '\0')
temp = "x";
/* if name is a device */
for (i=0; i<9; i++) {
if (!strcmp(temp, dev[i]))
*temp = 'x';
}
/* name too long? */
if (strlen(temp) > 8)
*(temp+8) = '\0';
/* extention too long? */
if (strlen(ext) > 3)
*(ext+3) = '\0';
/* illegal characters? */
while (s = strpbrk(temp, "^+=/[]:',?*\\<>|\". "))
*s = 'x';
while (s = strpbrk(ext, "^+=/[]:',?*\\<>|\". "))
*s = 'x';
strcpy(ans, temp);
if (*ext) {
strcat(ans, ".");
strcat(ans, ext);
}
return(ans);
}
#ifdef BSD
/*
* Return ptr to first occurrence of any character from `brkset'
* in the character string `string'; NULL if none exists.
*/
char *
strpbrk(string, brkset)
register char *string, *brkset;
{
register char *p;
if (!string || !brkset)
return(0);
do {
for (p = brkset; *p != '\0' && *p != *string; ++p)
;
if (*p != '\0')
return(string);
}
while (*string++);
return(0);
}
#endif /* BSD */