This is fmerge.c in view mode; [Download] [Up]
/* Merges small files back to original using descriptor file. */ #include <config.h> #include <stdio.h> #include <string.h> #include <limits.h> #ifndef sequent #include <stdlib.h> #endif #ifdef VMS #include <file.h> #endif #ifdef unix #include <sys/types.h> #include <sys/stat.h> #include <sys/file.h> #ifdef SYSV #include <sys/fcntl.h> #endif #endif #ifdef msdos #include <fcntl.h> #include <io.h> #include <sys/stat.h> #endif #ifndef msdos #define MAX_LEN 65536 #else #define MAX_LEN 4096 #endif #include "vfile.h" int Quiet = 0; void usage(char *prog) { char *str = "filename"; fprintf(stderr, "%s: Usage: %s [-quiet]\n", prog, str); exit(1); } void error(char *fmt, char *str) { fprintf(stderr, fmt, str); putc('\n', stderr); exit(1); } int Max_Lines = 2000; FILE *open_descriptor_file(char *file) { FILE *fp; #ifdef msdos _fmode = O_TEXT; #endif if (NULL == (fp = fopen(file, "r"))) { error("Unable to open descriptor file %s", file); } #ifdef msdos _fmode = O_BINARY; #endif return (fp); } /* file is name of dsc file */ void merge(char *file) { VFILE *vp; unsigned int total, len; int fp; char *buf, *p; char buffer[256], fsplit[256]; FILE *fd; fd = open_descriptor_file(file); fgets(fsplit, 255, fd); /* remove newline char */ p = fsplit; while (*p > ' ') p++; *p = 0; /* next line is format--- ignore it. */ fgets(buffer, 255, fd); #ifdef VMS fp = open(fsplit, O_WRONLY | O_CREAT | O_TRUNC, 0, "rat=cr", "rfm=var"); #else #ifdef unix fp = open(fsplit, O_WRONLY | O_CREAT | O_TRUNC, 0666); #else _fmode = O_BINARY; fp = open(fsplit, O_WRONLY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE); #endif #endif if (fp < 0) { error("Error creating %s", fsplit); } while (1) { if (buf == NULL) { if (vp != NULL) vclose(vp); if (fgets(fsplit, 255, fd) == NULL) break; p = fsplit; while (*p > ' ') p++; *p = 0; if (NULL == (vp = vopen(fsplit, MAX_LEN))) { error("Error opening %s", fsplit); } if (!Quiet) fprintf(stdout, "Processing %s.\n", fsplit); } else write(fp, buf, len); buf = vgets(vp, &len); } if (vp != NULL) { vclose(vp); } fclose(fd); close(fp); } int main(int argc, char **argv) { char *file; switch (argc) { case 3: Quiet = 1; case 2: file = argv[1]; break; default: usage(argv[0]); } merge(file); return(0); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.