/* APPEND.C Written by Leor Zolman, BD Software, 9/82 Usage: A>append Appends the given new text onto the existing dest file, using CP/M 2.2x random-record I/O to keep from having to read through the entire destination file. The new-text file is loaded into memory before appending, so it has to be short enough to fit into memory. If the dest-file doesn't exist, it is created anew. */ #include "bdscio.h" char *tbuffer; main(argc, argv) char **argv; { int lastsec, esize, i, j; int fdcurr, fdentry; char *eptr; unsigned tbufsize; tbuffer = endext(); tbufsize = topofmem() - endext() - 500; if (argc != 3) exit(puts("Usage: append \n")); if ((fdcurr = open(argv[2],2)) == ERROR) { printf("Creating a new current workfile: %s...\n",argv[2]); fdcurr = creat(argv[2]); tbuffer[0] = CPMEOF; lastsec = 0; } else { lastsec = rcfsiz(fdcurr) - 1; seek (fdcurr, lastsec, 0); if (read(fdcurr, tbuffer, 1) < 0) { printf("Can't read %s\n",argv[2]); exit(); } } for (i = 0; tbuffer[i] != CPMEOF; i++); /* find EOF */ if ((fdentry = open(argv[1],0)) == ERROR) { printf("Can't open %s to append\n",argv[1]); fabort(fdcurr); exit(); } esize = read(fdentry, tbuffer + i, (tbufsize - SECSIZ)) * SECSIZ; close(fdentry); for (eptr = tbuffer + i + esize - SECSIZ; *eptr != CPMEOF; eptr++) if (eptr == tbuffer + i + esize) { *eptr++ = CPMEOF; break; } seek(fdcurr, lastsec, 0); if (write(fdcurr, tbuffer, (j = (eptr - tbuffer)/128 + 1)) != j) { printf("Write error; disk probably full\n"); fabort(fdcurr); exit(); } close(fdcurr); printf("%s successfully updated.\n",argv[2]); }  .