CONCAT Version 0.8 Gene Pizzetta March 8, 1989 CONCAT concatenates two or more source files into a destination file, similar to PIP. Unlike PIP, however, CONCAT accepts both named directory (DIR) and drive/user (DU) specifications, which allows elaborate concatenations with input files pulled from various drives and user areas. CONCAT runs under ZCPR3 only. USAGE: CONCAT {dir:}outfile = {dir:}infile {{dir:}infile {...}} {/options} Any file without a DU or DIR specification is assumed to be on the current drive/user. OPTIONS: A Append mode. Appends sources files to end of target file, which must exist. This mode by-passes some of CONCAT's safety features (see below). D Insert date and time. The current system date and time is inserted at the head of new output file or, in append mode, at the end of the existing file before any files are appended. This option is incompatible with the O option. O Object file mode (CONCAT ignores ^Z characters). The default is text file mode, checking for ^Z (the CP/M end-of-file character). Object file mode is provided because some hard-disk backup programs can split large files across two or more floppy disks. This option is incompatible with the D option. Q Toggle quiet mode. Normally CONCAT prints the names of the output file on the screen, and then the name of each source file as it is read. If a configuration byte at 111h is set to a non-zero value, CONCAT will default to quiet operation, printing only error messages. The Q option toggles operation to the non- default mode. Regardless of the state of the configuration byte, CONCAT defaults to quiet mode if the ZCPR3 quiet flag is set. In that case the Q option will likewise toggle to the non-default (verbose) mode. CONCAT requires an output file and at least one source (input) file. Actually, it can be used as a simple file-copy utility, but that's not its purpose. The same filename may be given repeatedly in the source file list. An equal sign (=) separates the output filename from the source filenames. Commas or spaces, or both, separate multiple source filenames. While the equal sign is required, it may be separated from the filenames by one or more spaces. The same applies to commas, if they are used. For example, concat newfile.txt=file1.txt,file2.txt,file3.txt,file4,txt works the same as concat newfile.txt=file1.txt file2.txt file3.txt file4.txt which works the same as concat newfile.txt = file1.txt, file2.txt ,file3.txt , file4.txt which works the same as concat newfile.txt = file1.txt file2.txt file3.txt, file4.txt A filename cannot begin with a slash unless it is preceded by a DU or DIR specification; otherwise, CONCAT will think it has found an option list. If another file has the same name as the output file, it will be renamed to filetype BAK. CONCAT initially creates the output file with a filetype of $$$. After the copy is successfully completed, any existing BAK file is erased, the new BAK file is created, and the output file is renamed to the correct filetype. CONCAT is re-entrant for use with the GO command. APPEND MODE: In append mode (option A) CONCAT by-passes several safety features, so use it with caution. For instance, no temporary file or BAK file is created. The target (output) file must already exist, but it can be zero-length. On error, the output file is closed after appending any text that was read before the error occurred. The output file is not erased. It's a good idea to make sure you have sufficient disk space before using append because your original source file will be irrevocably changed if CONCAT runs out of space before it is finished. Do not attempt to append a file to itself. You're not likely to be happy with the results. Use concatenation mode instead. If you would like to be able to append without using the A option, set up an ARUNZ alias script as follows: APPEND CONCAT $* /A DATE STRING: The time and date string is inserted only once for each invocation of CONCAT. If concatenation is used, the date appears at the beginning of the newly created file. If the append option is selected, the date appears between the original (target) file and the first appended file. In other words, if several files are appended in a single operation, only the first file is preceded by the date string. This option is provided primarily for those who want to append to a log file on a regular basis, but still keep track of the time period to which each section of the file pertains. The strings sent prior to and subsequent to the date and time string may be configured to your liking. In the distributed version they are: PREFIX: "--- [ " SUFFIX: " ] ---"LF> Thus the date will appear as: --- [ 3/08/90 13:46 ] --- In the first sector of the COM file are two 31-byte buffers where you may change the two strings to your liking. The strings must end with a null byte. The buffers are preceded by the ASCII flags "PREFIX>" AND "SUFFIX>". For instance, you might want to insert control characters that would cause your printer to print the date and time in boldface, although they might not display too well on your screen. ERROR CODES: If an error occurs, such as a source file not found, the incomplete output file is erased and the ZCPR3 program error flag is set. The error flag values are set as follows: 8 = ambiguous or missing filename (output or source) 10 = source or target file not found or not given 11 = disk or directory full (write error) 4 = all other errors For safety reasons, invalid or incompatible options are considered errors (Options D and O are incompatible). Using the D option without a resident clock also yields an error. Error messages are output without regard for quiet mode. HISTORY: Version 0.8 -- March 8, 1990 -- Gene Pizzetta Added D (date) option. Date string prefix and suffix may be configured (see above). Corrected minor bug which caused the temporary file not to be erased if the first input file was not found. Now senses size of TPA and dynamically sets the size of the output buffer up to a maximum of 32K. (CONCAT and its data area have become too large for a static 32K output buffer, what with RSX's, et al.) Invalid options are no longer ignored, but now cause an error. Version 0.7 -- December 17, 1989 -- Gene Pizzetta Added A (append) option, which by-passes several of CONCAT's safety features. Also, a few more optimizations. Version 0.6 -- December 3, 1989 -- Gene Pizzetta Minor changes in setting error flag. Corrected serious error in detecting top of memory, found by Howard Goldstein, who also suggested several changes to make the code more efficient. Thanks, Howard. Version 0.5 -- November 25, 1989 -- Gene Pizzetta Added Q (quiet) option and error flag support. Fixed parser bug that allowed a null output filename. Now closes output file on error before erasing it, a bug discovered by Howard Goldstein. Version 0.4 -- November 12, 1989 -- Gene Pizzetta Added large output buffer. Corrected error in parsing filespec in current user. Relaxed command line syntax: commas no longer required. Now obeys quiet flag. Version 0.3 -- September 19, 1989 -- Gene Pizzetta First preliminary release. If you have any suggestions for enhancements, I'm anxious to hear them. Most importantly, please report any bugs or other problems. To report bugs or make suggestions: Gene Pizzetta 481 Revere Street Revere, MA 02151 Newton Centre Z-Node: (617) 965-7259 Lilliput Z-Node: (312) 649-1730 Voice: (617) 284-0891