[comp.binaries.ibm.pc] concopy, duplicates output into a file v1.0

W8SDZ@SIMTEL20.ARMY.MIL (Keith Petersen) (10/24/88)

Copy to a file all standard output to screen.  Snarfed from local BBS.

David Kirschbaum
Toad Hall
kirsch@braggvax.ARPA

[
This program is by Chris Dunford, a well-known author of free software,
who also wrote the highly-rated CED utility.  Invoke the program, which
gives you a new COMMAND.COM.  Run any programs you wish.  When done,
type EXIT to exit this copy of COMMAND.COM.  Everything sent to
standard output while this COMMAND.COM was active has now been
duplicated to a file.  This is version 1.0.

Concopy duplicates only what a program writes to its standard output
via standard MS-DOS system calls, so it does not save anything written
directly via the ROM-BIOS routines.  It should successfully save output
from programs that require the use of ANSI.SYS.  (To save output from
programs that write via the ROM-BIOS, try the once-shareware FANSI-
CONSOLE device driver, which can save output in memory and later
transfer it to disk.)

(Aside:  I don't know the internal workings of Concopy, but let's
speculate.  Perhaps it opens the log file for write, invokes
COMMAND.COM, and when COMMAND.COM exits, it closes the log file and
exits itself.  The only slightly tricky thing it needs to do is to trap
all calls to MS-DOS function 0x40 (write to file or device), and if the
handle specified in register bx is 1, change "current PSP" back to its
own PSP using well-documented-but-not-by-Microsoft system calls,
duplicate that write request to its own already-open handle for the log
file, and restore the "current PSP".  Programmers looking for an
exercise, try the above and see if it works.  If it does, please send
source for posting here, since Concopy does not seem to come with any.)

Uudecode this article manually or feed to the "combine" script.

checksum     size (bytes)  file
    1331         6526      this uuencoded posting
   61779         4714      concopy.arc

-- R.D.
]

BEGIN--cut here--cut here
begin 644 concopy.arc
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
B2]8!/O`%QUTG%">PFR-<,(H$8F$*9[N"!PP`A6'LY``:`+3X
`
end
END--cut here--cut here