/* * 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 #include 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 \n"); exit(1); } for (i=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 */