/*
 * APPEND (c)1989 Oliver Enseling eine Datei an eine andere anfügen
 * Syntax: APPEND files [TO] file files darf ein AmigaDOS-Muster,
 * oder eine Auflistung mehrerer Dateien sein file ist eine einzelne
 * AmigaDOS-Datei
 */


#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>

#define BUFSIZE 256

struct FILEINFO FI;

char            Buffer[BUFSIZE];

#ifdef DEUTSCH
#define SYNTAX                                                               \
    "Syntax: APPEND dateien | muster [dateien | muster] [...]] [TO] datei\n" \
    "Version 1.00, ©1989 Oliver Enseling\n"
#define NOREAD "%s kann nicht gelesen werden\n"
#define NOWRITE "%s kann nicht beschrieben werden\n"
#else
#define SYNTAX                                                               \
    "Usage: APPEND files | pattern [files | pattern] [...]] [TO] file\n"     \
    "Version 1.00, ©1989 Oliver Enseling\n"
#define NOREAD "read error %s\n"
#define NOWRITE "write error %s\n"
#endif

void
main(argc, argv)
    int             argc;
    char          **argv;
{
  if (argc < 3)
    printf(SYNTAX);
  else {
    int             src, dest, count, i, maxi = stricmp(argv[argc - 2], "TO") == 0 ? argc - 2 : argc - 1;

    if ((dest = open(argv[argc - 1], O_APPEND | O_WRONLY | O_CREAT)) >= 0) {
      for (i = 1; i < maxi; i++)
        if ((src = open(argv[i], O_RDONLY)) >= 0) {
          do {
            count = read(src, Buffer, BUFSIZE);
            write(dest, Buffer, count);
          } while (count > 0);
          close(src);
        } else
          printf(NOREAD, argv[i]);
      close(dest);
    } else
      printf(NOWRITE, argv[argc - 1]);
  }
}
