TPC862@ESTEC.BITNET (10/20/86)
Here a utility I made to use in the AUTO folder on boot disks without the Micro C-Shell or similar. It copies a number of files from e.g. floppy to ramdisk. It is not the utmost of sophistication (no wildcarding), but it works. Enjoy. ----------------cut here-----autocopy.doc-------------------------------------- PROGRAM AUTOCOPY - Auto program to copy files at system boot FUNCTION This program is to be placed in the \AUTO folder on the boot disk. It can be used to copy your favourite files to a ramdisk (which of course must exist before this program is run). It looks for the file \AUTO\AUTOCOPY.DAT which describes the files to be copied. The format of a line in AUTOCOPY.DAT is: <source file> <destination file> An example : a:\xemacs.tos d:\xemacs.tos a:\make.prg d:\make.prg a:\gemstart.o d:\gemstart.o a:\osbind.o d:\osbind.o a:\gemlib d:\gemlib a:\aesbind d:\aesbind a:\vdibind d:\vdibind a:\libf d:\libf CAVEATS Source and destination files must be specified with full path names in AUTOCOPY.DAT. No wildcards allowed. AUTOCOPY will not overwrite existing files (no extra copy at reset when files are still in the ramdisk). Linelength in AUTOCOPY.DAT is limited to 80 characters, so no very long path names. ----------------cut here-----end of autocopy.doc------------------------------- And now the program written with Alcyon C. Link with gemstart.o, osbind.o and gemlib. ----------------cut here-----autocopy.c---------------------------------------- /* * autocopy.c - Program to copy files on startup */ #include <stdio.h> #include <ctype.h> #include <osbind.h> int cp(linebuf) register char *linebuf; { char source[128], dest[128]; char buf[4096]; register char *p; register int fsource, fdest; register long count; while(isspace(*linebuf)) linebuf++; if (*linebuf == '\0') { /* no source specified */ return 1; } for (p = source; !isspace(*linebuf) && (*linebuf != '\0'); *p++ = *linebuf++) /* copy */ ; *p = '\0'; while (isspace(*linebuf)) linebuf++; if (*linebuf == '\0') { /* no destination specified */ fprintf(stderr,"No destination file specified\n"); return 2; } for(p = dest; !isspace(*linebuf) && (*linebuf != '\0'); *p++ = *linebuf++) /* copy */ ; *p = '\0'; if ((fdest = Fopen(dest, 0)) > 0) { fprintf(stderr, "Will not overwrite %s\n", dest); Fclose(fdest); return 3; } if ((fsource = Fopen(source, 0)) < 0) { fprintf(stderr, "%s: no such file\n", source); return 4; } if ((fdest = Fcreate(dest, 0)) < 0) { fprintf(stderr, "%s: cannot open for write\n", dest); Fclose(fsource); return 5; } printf("Copying %s to %s\n", source, dest); while ((count = Fread(fsource, 4096L, buf)) > 0) { if (Fwrite(fdest, count, buf) != count) { fprintf(stderr, "Error writing %s\n", dest); Fclose(fsource); Fclose(fdest); return 6; } } if (count < 0) { fprintf(stderr, "Error reading %s\n", source); } Fclose(fsource); Fclose(fdest); return 0; } main() { FILE *fsource; FILE *fopen(); char buf[82]; printf("\033E AUTOCOPY V1.0\n\n"); if ((fsource = fopen("\\AUTO\\AUTOCOPY.DAT", "r")) == (FILE *)0) { fprintf(stderr,"\\AUTO\\AUTOCOPY.DAT not found\n"); return 3; } while (!(feof(fsource))) { fgets(buf, 82, fsource); if ferror(fsource) break ; else cp(buf); } fclose(fsource); printf("\nAUTOCOPY finished\n"); } ----------------cut here-----end of autocopy.c--------------------------------- Ton van Overbeek European Space Research and Technology Centre (ESTEC) Control Systems Section P.O.Box 299 2200 AG Noordwijk, The Netherlands. Phone: +31 1719 83041 Email: TPC862%ESTEC.BITNET@WISCVM.WISC.EDU (ARPA) ...!ucbvax!tpc862@estec.bitnet (USENET/UUCP) TPC862@ESTEC (EARN/BITNET)