From 6d266bb980dfd77ca957f994163ee497843ae004 Mon Sep 17 00:00:00 2001 From: Laurens Valk Date: Sat, 19 Sep 2020 23:38:13 +0200 Subject: [PATCH] mklist: Unzip source. --- mklist-c.zip | Bin 3559 -> 0 bytes mklist/include/alloc.h | 9 + mklist/include/conio.h | 23 ++ mklist/include/dir.h | 72 +++++ mklist/makefile | 16 ++ mklist/mklist.c | 596 +++++++++++++++++++++++++++++++++++++++++ mklist1_4.zip | Bin 10610 -> 0 bytes mklist1_6.zip | Bin 13367 -> 0 bytes 8 files changed, 716 insertions(+) delete mode 100644 mklist-c.zip create mode 100644 mklist/include/alloc.h create mode 100644 mklist/include/conio.h create mode 100644 mklist/include/dir.h create mode 100644 mklist/makefile create mode 100644 mklist/mklist.c delete mode 100644 mklist1_4.zip delete mode 100644 mklist1_6.zip diff --git a/mklist-c.zip b/mklist-c.zip deleted file mode 100644 index d4947f011a265c8325d8ac85d77adb6ec947df08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3559 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 diff --git a/mklist/include/alloc.h b/mklist/include/alloc.h new file mode 100644 index 000000000..7eb47373d --- /dev/null +++ b/mklist/include/alloc.h @@ -0,0 +1,9 @@ +#ifndef ALLOC_H +#define ALLOC_H + +#define farmalloc(n) malloc((n)) +#define farrealloc(i,j) realloc((i),(j)) +#define farcoreleft() (0) + +#endif /* ALLOC_H */ + diff --git a/mklist/include/conio.h b/mklist/include/conio.h new file mode 100644 index 000000000..820295756 --- /dev/null +++ b/mklist/include/conio.h @@ -0,0 +1,23 @@ +#ifndef CONIO_H +#define CONIO_H + +#define getch() getc(stdin) + +int stricmp(const char *str1, const char *str2) +{ + const unsigned char * ptr1 = (unsigned char *) str1; + const unsigned char * ptr2 = (unsigned char *) str2; + unsigned char c1, c2; + + while ((c1 = toupper(*ptr1++)) == (c2 = toupper(*ptr2++))) + { + if (!c1) + { + return(0); // end of both strings reached, so they match + } + } + // first non-matching char was reached, including possibly 0 on one or the other string + return(c1 - c2); +} + +#endif /* CONIO_H */ diff --git a/mklist/include/dir.h b/mklist/include/dir.h new file mode 100644 index 000000000..0e7585dda --- /dev/null +++ b/mklist/include/dir.h @@ -0,0 +1,72 @@ +#ifndef DIR_H +#define DIR_H + +# include +# include +# include + +struct ffblk +{ + char *ff_name; +}; + +#if defined(MAC) + char separator = ':'; +# define SEPSTR ":" +#else + char separator = '/'; +# define SEPSTR "/" +#endif + +DIR *dirp; +struct dirent *dir; +char directory[300]; + +int findnext(struct ffblk *ffb) +{ + struct stat statbuf; + char filename[300]; + + for (dir = readdir(dirp); dir; dir = readdir(dirp)) + { + ffb->ff_name = dir->d_name; + strcpy(filename, directory); + strcat(filename, SEPSTR); + strcat(filename, dir->d_name); + stat(filename,&statbuf); + if ((statbuf.st_mode & S_IFDIR) == 0) // Skip directories + return 0; // not done + } + return 1; // done +} + +int findfirst(char *path, struct ffblk *ffb, int first) +{ + int i; + char *ptr; + + /* Localize Directory Separators */ + for(i=0; i +#define LACKS_BASENAME 1 + +#else +int GetShortPathName(char *longpath, char * shortpath, int psize) +{ + strncpy(shortpath, longpath, psize); + return(strlen(shortpath); +} +#endif + + +#if LACKS_BASENAME +char *basename( const char *filepath ) +{ + char *tmpstr, *ptr; + + if (filepath == NULL) + { + return NULL; + } + if ( (ptr = strrchr(filepath, '\\')) || (ptr = strrchr(filepath, '/')) ) + { + /* If there isn't anything after the last separator, the result is a 0-length string */ + tmpstr = strdup(ptr+1); + } + else + { + /* dup the string, so caller can safely free whatever we return */ + tmpstr = strdup(filepath); + } + return tmpstr; +} +#endif + + /*****************************************************************/ +int CmpNumber(const void *p1, const void *p2) +{ + char *s1 = *((char **) p1); + char *s2 = *((char **) p2); + long l1; + long l2; + + if (isdigit(*s1) && isdigit(*s2)) + { + l1 = atol(s1); + l2 = atol(s2); + if (l1 != l2) + return (l1 < l2 ? -1 : 1); + /* Numbers are equal. Be sure to make 3005.dat come before 3005-1.dat */ + do + { + l1 = (unsigned char) *s1++; + if ('A' <= l1 && l1 <= 'Z') + l1 -= ('A' - 'a'); + else if (l1 == '.') + l1 = '\0'; /* Sort dot very first */ + l2 = (unsigned char) *s2++; + if ('A' <= l2 && l2 <= 'Z') + l2 -= ('A' - 'a'); + else if (l2 == '.') + l2 = '\0'; /* Sort dot very first */ + } while (l1 && (l1 == l2)); + + return ((int) (l1 - l2)); + } + return (stricmp(s1, s2)); +} + +/*****************************************************************/ +int CmpDescription(const void *p1, const void *p2) +{ + char *s1 = *((char **) p1); + char *s2 = *((char **) p2); + int Res; + +#if 0 + Res = stricmp(s1 + (namelen+2), s2 + (namelen+2)); +#else + s1 += strcspn(s1, " \t"); /* Find the beginning of whitespace. */ + s1 += strspn(s1, " \t"); /* Skip to end of whitespace (start of description). */ + s2 += strcspn(s2, " \t"); /* Find the beginning of whitespace. */ + s2 += strspn(s2, " \t"); /* Skip to end of whitespace (start of description). */ + Res = stricmp(s1, s2); +#endif + + return (Res ? Res : CmpNumber(p1, p2)); +} + +/*****************************************************************/ +void PressAnyKey(void) +{ + if (forceit) + return; + if (quiet) + return; + printf(" Press any key to continue"); + getch(); + printf("\n"); +} + +/*****************************************************************/ +void PrintUsage(void) +{ + printf("Options:\n"); + printf(" -h You already figured this one out :-)\n"); + printf(" -n Sort by Number\n"); + printf(" -d Sort by Description\n"); + printf(" -c Check for duplicate descriptions. \"parts.lst\" unchanged.\n"); + printf(" -m Don't skip parts with \"~Moved to xxx\" description\n"); + printf(" -~ Skip parts with ~ description, e.g. \"~Winch 2 x 4 x 2 Top\"\n"); + printf(" -i input directory, default is \"PARTS\" in current directory\n"); + printf(" -o output filename, default is \"parts.lst\" in current directory\n"); + printf(" -f Force it to finish. No prompts.\n"); + printf(" -q Quiet mode. No warnings, and no prompts.\n"); + printf(" -8 Use 8.3 names for compatibility.\n"); + printf(" -t Truncating descriptions to fit in an 80 char terminal window.\n"); + printf(" -r Ragged filename column. Size it to fit short filenames.\n"); + printf(" -l Truncate Long descriptions at 64 chars.\n"); + printf(" -v Print verbose info. Useful for debugging.\n"); +} + + /*****************************************************************/ +int main(int argc, char **argv) +{ + int CheckDuplicateDescriptions; + int SortBy; + int SkipTilde; + int SkipMovedto; + char *arg; + int c; + int i; + int j; + FILE *fp; + struct ffblk ffb; + int done; + int Len; + char **Lines; + int maxLines; + int nLines; + int pathlen; + char Line[200]; + char Dirname[MAX_PATH]; + char Filename[MAX_PATH]; + char OutFilename[MAX_PATH]; + char *s; + char *Description; + char *FormattedLine; + unsigned long farcoreleftStart; + unsigned long farcoreleftEnd; + long FileSize; + struct stat statbuf; + int verbose; + int ragged; + int terminalsized; + int longDescriptions; + + printf("%s\n", ProgVer); + printf("Replacement for James Jessiman's makelist\n"); + printf("Call with -h to see a list of options.\n\n"); + + strcpy(Dirname, "PARTS"); /* Default input directory path */ + strcpy(OutFilename, "parts.lst"); /* Default output filename */ + + verbose = 0; + ragged = 0; /* Steve wanted it ragged (1) by default */ + terminalsized = 0; /* Steve wanted it (1) to fit in 80 chars by default */ + longDescriptions = 1; /* Do not truncate descriptions at 64 chars by default */ + + CheckDuplicateDescriptions = 0; + SortBy = 0; + SkipTilde = 0; + SkipMovedto = 1; + while (--argc > 0) + { + arg = *++argv; + if (arg[0] == '-') + { + switch (arg[1]) + { + case '?': + case 'h': + PrintUsage(); + exit(1); + break; + case '8': + namelen = 12; + break; + case 'c': + CheckDuplicateDescriptions = 1; + break; + case 'n': + case 'd': + SortBy = arg[1]; + break; + case 'm': + SkipMovedto = 0; + break; + case '~': + SkipTilde = 1; + break; + case 'i': + if (--argc > 0) + strcpy(Dirname, *++argv); + else + { + PrintUsage(); + printf("*** input directory expected as next argument after -i.\n"); + exit(1); + } + break; + case 'o': + if (--argc > 0) + strcpy(OutFilename, *++argv); + else + { + PrintUsage(); + printf("*** output filename expected as next argument after -o.\n"); + exit(1); + } + break; + case 'q': + quiet = 1; + case 'f': + forceit = 1; + break; + case 'r': + ragged = ragged ^ 1; + break; + case 't': + terminalsized = terminalsized ^ 1; + break; + case 'l': + longDescriptions = longDescriptions ^ 1; + break; + case 'v': + verbose = 1; + break; + default: + PrintUsage(); + printf("*** Unknown option '%s'.\n", arg); + exit(1); + break; + } + } + else + { + PrintUsage(); + exit(1); + } + } + + /* Do a stat to see if Dirname exists and is a directory. */ + if (stat(Dirname, &statbuf) < 0) + { + printf("*** Could not stat input directory \"%s\".\n", Dirname); + exit(1); + } + + if ((statbuf.st_mode & S_IFDIR) == 0) + { + printf("*** Input directory \"%s\" is not a directory.\n", Dirname); + exit(1); + } + + if (CheckDuplicateDescriptions) + SortBy = 'd'; + if (!SortBy) + { + if (forceit) + SortBy = 'd'; + if (!quiet) + printf("Sorting by [D]escription.\n"); + } + + if (!SortBy) + { + printf("Sort by [N]umber or [D]escription: "); + c = getch(); + printf("%c\n", c); + + if (c == 'N' || c == 'n') + SortBy = 'n'; + else if (c == 'D' || c == 'd') + SortBy = 'd'; + else + { + printf("Nothing done.\n"); + exit(0); + } + } + + farcoreleftStart = farcoreleft(); + + nLines = 0; + maxLines = numlines; + Lines = farmalloc(maxLines * sizeof(char *)); + if (!Lines) + { + printf("Out of memory after %d parts\n", nLines); + printf("Memory available at beginning: %ld kBytes\n", + (farcoreleftStart + 1023) / 1024); + exit(1); + } + strcpy(Filename, Dirname); + strcat(Filename, "\\"); + pathlen = strlen(Filename); + strcat(Filename, "*.*"); + for (done = findfirst(Filename, &ffb, 0); !done; done = findnext(&ffb)) + { + if (verbose) + { + printf("Processing file: \"%s\"\n", ffb.ff_name); + } + strcpy(Filename + pathlen, ffb.ff_name); + fp = fopen(Filename, "rt"); + if (!fp) + { + if (!quiet) printf("Cannot open \"%s\"", ffb.ff_name); + PressAnyKey(); + continue; + } + fgets(Line, sizeof(Line), fp); + fclose(fp); + + s = Line + strlen(Line) - 1; + while (s >= Line && (*s == '\n' || *s == '\r' || *s == '\t' || *s == ' ')) + *s-- = '\0'; /* clear newline and trailing tabs + and spaces */ + s = Line; + while (*s == '\t' || *s == ' ') + *s++; + if (*s++ != '0') + { + if (!quiet) printf("Line type 0 expected in \"%s\", skipping...", ffb.ff_name); + PressAnyKey(); + continue; + } + while (*s == '\t' || *s == ' ') + *s++; + Description = s; + if (SkipTilde && Description[0] == '~') + continue; + if (SkipMovedto && strncmp(Description, "~Moved to", 9) == 0) + continue; + Len = strlen(Description); + if (Len == 0) + { + if (!quiet) printf("Empty description in \"%s\"", ffb.ff_name); + PressAnyKey(); + } + if ((Len > 64) && !longDescriptions) + { + /* Original makelist truncates to 64 characters. */ + if (!quiet) + { + printf("Description in \"%s\" will be truncated to 64 characters:\n", + ffb.ff_name); + printf("Before: \"%s\"\n", Description); + printf("After: \"%-64.64s\"\n", Description); + } + PressAnyKey(); + } + if (namelen == 12) + FormattedLine = farmalloc(79); + else + FormattedLine = farmalloc(256); + if (!FormattedLine) + { + printf("Out of memory after %d parts\n", nLines); + printf("Memory available at beginning: %ld kBytes\n", + (farcoreleftStart + 1023) / 1024); + exit(1); + } + + + if (namelen > 12) + strcpy(shortfilename, ffb.ff_name); + else + { + GetShortPathName(Filename, shortfilepath, MAX_PATH); + s = basename(shortfilepath); + strcpy(shortfilename, s); + if (s != NULL) + free(s); + if (strcmp(ffb.ff_name, shortfilename)) + { + if (!quiet) + printf("Filename \"%s\" will be shortened to %s\n", + ffb.ff_name, shortfilename); + PressAnyKey(); + } + } + + Len = strlen(shortfilename); + if (Len > namelen) + { + if (!quiet) + printf("Filename \"%s\" will be truncated to %d characters.\n", + shortfilename, namelen); + PressAnyKey(); + } + shortfilename[namelen] = 0; + if (namelen == 12) + sprintf(FormattedLine, "%-12s %-64.64s", shortfilename, Description); + else if (ragged && terminalsized) + { + if (Len > 14) /* Squeeze every last char out of the 80. */ + sprintf(FormattedLine, "%s %-64.64s", shortfilename, Description); + else + sprintf(FormattedLine, "%-14s %-64.64s", shortfilename, Description); + } + else if (ragged && longDescriptions) + { + if (Len > 12) + sprintf(FormattedLine, "%s %s", shortfilename, Description); + else + sprintf(FormattedLine, "%-12s %s", shortfilename, Description); + } + else if (ragged) + { + if (Len > 12) + sprintf(FormattedLine, "%s %-64.64s", shortfilename, Description); + else + sprintf(FormattedLine, "%-12s %-64.64s", shortfilename, Description); + } + else if (longDescriptions) + sprintf(FormattedLine, "%-25s %s", shortfilename, Description); + else + sprintf(FormattedLine, "%-25s %s", shortfilename, Description); + + if (terminalsized) + { + if (namelen == 12) + FormattedLine[78] = 0; + else + FormattedLine[80] = 0; + } + + if (verbose) + { + printf("%d:\t%s\n", nLines, FormattedLine); + } + if (nLines >= maxLines) + { + /* Let's have another 1000 pointers */ + maxLines += numlines; + Lines = farrealloc(Lines, maxLines * sizeof(char *)); + if (!Lines) + { + printf("Out of memory after %d parts\n", nLines); + printf("Memory available at beginning: %ld kBytes\n", + (farcoreleftStart + 1023) / 1024); + exit(1); + } + } + Lines[nLines++] = FormattedLine; + if (nLines % 100 == 0) + printf("%d parts so far...\r", nLines); + } + printf("%d parts found in %s.\n", nLines, Dirname); + if (nLines == 0) + { + printf("No parts found, nothing done.\n"); + exit(0); + } + + printf("Sorting...\n"); + qsort(Lines, nLines, sizeof(Lines[0]), + (SortBy == 'n') ? CmpNumber : CmpDescription); + + if (CheckDuplicateDescriptions) + { + printf("Checking for duplicate descriptions. \"%s\" unchanged.\n", OutFilename); + for (i = 0; i < nLines; i += j) + { + for (j = 1; i + j < nLines; j++) + { + if (stricmp(Lines[i] + (namelen+2), Lines[i + j] + (namelen+2)) != 0) + break; /* OK to break, lines are sorted */ + if (j == 1) /* First duplicate */ + printf("%s\n", Lines[i]); + printf("%s\n", Lines[i + j]); + } + if (j > 1) /* Duplicates found */ + PressAnyKey(); + } + } + else + { + fp = fopen(OutFilename, "wt"); + if (!fp) + { + printf("Cannot open \"%s\" for writing.\n", OutFilename); + exit(1); + } + for (i = 0; i < nLines; i++) + fprintf(fp, "%s\n", Lines[i]); + FileSize = ftell(fp); + fclose(fp); + printf("\"%s\" successfully written, %ld kBytes\n", OutFilename, + (FileSize + 1023) / 1024); + } + + if (numlines > 1000) /* if not Borland DOS compiler then skip the mem msg. */ + { + return (0); + } + + farcoreleftEnd = farcoreleft(); + + printf("Maximum memory usage: %ld kBytes of %ld kBytes available\n", + (farcoreleftStart - farcoreleftEnd + 1023) / 1024, + (farcoreleftStart + 1023) / 1024); + + return (0); +} diff --git a/mklist1_4.zip b/mklist1_4.zip deleted file mode 100644 index ea6a204c8171709c95f4978aade442a2adb9d41b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10610 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 AsQ>@~ diff --git a/mklist1_6.zip b/mklist1_6.zip deleted file mode 100644 index 40e9c953775c8eabe3c5bd012ed863b1773fb597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13367 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

{V=cXw>?zj&67Xy_n{3BUHWF4{-=hAee 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 J1EzoV{ujW-yQKgC