int main(int argc, char *argv[]) { long newsize = 32L * 1024L; size_t seq = 0; char fname[FILENAME_MAX]; FILE *from; if (2 > argc) { puts("SPLIT big_file [size_in_K]\n"); puts("creates files of the same name, " "but with numeric extensions"); puts("a maximum file size may be specified for new files"); return EXIT_SUCCESS; } if (2 < argc) { newsize = atol(argv[2]); newsize <<= 10; } if (NULL == (from = fopen(argv[1], "r"))) { printf("\aSPLIT: error - can't open %s\n", argv[1]); return EXIT_FAILURE; } fnSplit(argv[1], NULL, NULL, NULL, NULL, fname, NULL); while (!feof(from)) { char newname[FILENAME_MAX], buf[1024]; FILE *to; long bytes; sprintf(newname, "%s.%03d", fname, seq++); if (NULL == (to = fopen(newname, "w"))) { printf("\aSPLIT: error - can't write %s\n", newname); return EXIT_FAILURE; } for (bytes = 0L; !feof(from) && (bytes < newsize); ) { if (fgets(buf, 1023, from)) { fputs(buf, to); bytes += (long)strlen(buf); } } fclose(to); printf("%s written\n", newname); } return EXIT_SUCCESS; }
static wchar_t *makeCmdLine ( bool ask, wchar_t *buffer, const wchar_t *mask, const wchar_t *dir, const wchar_t *fn, const wchar_t *title = nullptr, const wchar_t macro = L'=' ) { static wchar_t tmp[NM]; static wchar_t n1[NM], drv1[NM], dir1[NM], fil1[NM], ext1[NM]; static wchar_t n2[NM], drv2[NM], dir2[NM], fil2[NM], ext2[NM]; wchar_t *i, *j, *e1 = ext1, *e2 = ext2, *smartQuote = nullptr; fExpand (wcscpy (tmp, fn), dir); GetFullPathName (tmp, _countof(n1), n1, &j); fnSplit (n1, drv1, dir1, fil1, ext1); GetShortPathName (tmp, n2, _countof(n2)); fnSplit (n2, drv2, dir2, fil2, ext2); wcscat (wcscat (wcscat (wcscpy (n1, drv1), dir1), fil1), ext1); wcscat (wcscat (wcscat (wcscpy (n2, drv2), dir2), fil2), ext2); if (*e1 == L'.') e1++; if (*e2 == L'.') e2++; i = (wchar_t *) mask; if (ask) { nullUserStrings (); if (!scanUserInput (false, L'=', mask, title)) return (nullptr); } *tmp = 0; *(j = buffer) = 0; while (*i) { int dosName = 0, noDrive = 0, noBackslash = 0, doQuote = 1; wchar_t *m = wcschr (i, macro); if (m) { *m = 0; wcscat (j, i); j = wcschr (j, 0); *m = macro; if (*++m == macro) { j[0] = macro; j[1] = 0; j = wcschr (j, 0); i = m + 1; } else if (ask && wcschr (L"0123456789?", *m)) { if (*m != L'?') wcscpy (j, userString[*m - L'0']); j = wcschr (j, 0); if (*m == L'?') { m++; while (*m) { if ((m[0] == L'\\') && ((m[1] == L'\\') || (m[1] == L'\'') || (m[1] == L'?'))) { m++; m++; } else { if (*m == L'?') break; else m++; } } } i = m + 1; } else { int modifyer = 1; while (modifyer) { switch (*m) { case L'd': dosName = 1; break; case L'm': noDrive = 1; break; case L't': noBackslash = 1; break; case L'o': doQuote = 0; break; default: m--; modifyer = 0; break; } m++; } switch (*m) { case L'M': wcscat (j, drv1); break; case L'N': wcscat (j, quote (doQuote, wcscpy (tmp, dosName ? fil2 : fil1))); break; case L'E': if (*(m + 1) == L's') { EditorGetStringEx egs; EditorGetStr (&egs); wcsncpy (j + wcslen (j), egs.StringText, egs.StringLength + 1); m++; } else if (*(m + 1) == L'p') { TEditorPos pos = EditorGetPos (); FSF.itoa64 (pos.Row + 1, tmp, 10); wcscat (j, tmp); m++; } else if (*(m + 1) == L'c') { TEditorPos pos = EditorGetPos (); FSF.itoa64 (pos.Col + 1, tmp, 10); wcscat (j, tmp); m++; } else wcscat (j, quote (doQuote, wcscpy (tmp, dosName ? e2 : e1))); break; case L'F': wcscpy (tmp, dosName ? fil2 : fil1); if (*(dosName ? e2 : e1)) wcscat (wcscat (tmp, L"."), dosName ? e2 : e1); wcscat (j, quote (doQuote, tmp)); break; case L'D': if (noDrive) *tmp = 0; else wcscpy (tmp, drv1); wcscat (tmp, dosName ? dir2 : dir1); if (noBackslash) delBackslash (tmp); wcscat (j, quote (doQuote, tmp)); break; case L'P': if (noDrive) { wcscpy (tmp, dosName ? dir2 : dir1); wcscat (tmp, dosName ? fil2 : fil1); if (*(dosName ? e2 : e1)) wcscat (wcscat (tmp, L"."), dosName ? e2 : e1); wcscat (j, quote (doQuote, tmp)); } else wcscat (j, quote (doQuote, wcscat (tmp, dosName ? n2 : n1))); break; case L'\'': if (smartQuote) { for (wchar_t *p = smartQuote; *p; p++) if (*p == L'\"') *p = L'\''; quote (1, smartQuote); smartQuote = nullptr; } else smartQuote = wcschr (j, 0); break; } i = m + 1; j = wcschr (j, 0); } } else break; } wcscat (j, i); return (buffer); }