A PC used for electronic mail experienced intermittent read errors. The decision was made to back it up, low level format the hard disk, upgrade to a new release of DOS, and restore from the backup floppies. (Yes, all at once!) Restore refused to read disk 10 of 25, although the disk number in the BACKUPID.@@@ file was correct. (I hate MSDOS.)
Some additions have been made since the original was written, such as file date/time and the handling of read-only files. You'll also find stubs of work in progress. It should handle wildcards (* and ?) on the command line or at the 'Enter next file name' prompt and it should bring up a directory of the files on drive A, but, as they say in most textbooks, "These are left as an exercise for the reader."
Compiled with Mark Williams' "Let's C" (4.0.10). A compiler with a richer library will probably have mkdir() which should be used in place of the system() calls, or you can adapt the mkdir()/intcall() to your compiler. If your compiler doesn't have mkdir() or an interrupt call, compile with -dNOMKDIR to use the system() mkdir.
'intcall()' may be 'int86()' or 'intdos()' under other compilers, and the date/time and attribute routines will need to be adapted to your compiler, or you can comment out these functions. The restore will still work, but the date/time of the restored file will be the current date/time, not the date/time of creation, and the file attributes of the restored file will be set to 'none'. Also, you will NOT be able to restore over an existing read-only file.
No warranty express or implied, no known bugs (it worked for me), tested under AT&T MSDOS 3.2 on AT&T 6300 (8086) & AT&T 6310 (80286) computers, MS-DOS 5 and 6.22 on 80386, 80486, Pentium, and Cyrix 586 computers, and Windows 95 on 80486, Pentium, and Cyrix 586 computers.