I have just posted to ColeSoft's website a new version of my DSCOPY program. The link is www.colesoft.com/Downloads/downloads_utilities.html.

DSCOPY and everything else that you find on that page is free.



DSCOPY is a generalized sequential file copying program. It features include the following:

1.) DSCOPY can perform any number of separate copies in one jobstep.

2.) Input datasets may be sequential, direct, or individual members of partitioned data sets, or a concatenation of any combination of the above with any combination of DCB attributes (RECFM, LRECL, and BLKSIZE).

3.) Unlike-concatenations of input files are fully supported. Any input file may be a concatenation of any supported datasets having any combination of DCB attributes.

4.) Any record format is allowed (fixed, variable, undefined) for input, and it may be changed to any other record format for output. In addition, logical record lengths and/or block sizes may also be changed. All such changes are automatically accommodated for.

5.) All information needed is specified through JCL or through the PARM field. No control dataset (SYSIN, for example) is needed.

6.) Optionally, all 1st-quadrant bytes codes can be changed to periods or blanks.

7.) Optionally, a large number of date related built-in symbols are supported that can be replaced by either UTC-time related or local-time related date/time values.

8.) DSCOPY contains basic support for copying only a portion of a dataset.



(Sam, if you're here, could you do me a favor? If DSCOPY is still on the CBT mods tape, could you take it off and replace it with the above hyperlink? Thanks.)






I need a short break from the code this afternoon, so I'm going to indulge myself with a brief walk down memory lane. The more here-and-now guys among you might want to stop reading at this point. For the rest ...

I have been using DSCOPY for almost exactly 40 years now! I wrote the first version in 1969. I had just changed jobs. I had been working for the University of Pennsylvania's Computer Center (UPCC), and was beginning a new job for one of their commercial customers in downtown Philadelphia.

UPCC was running MFT with HASP (JES2's predecessor), and the SYSPROGs there had written an RYO charge-back system that was completely implemented as locally written mods to HASP. (HASP was a perfect place to measure CPU seconds, I/O bytes, cards read/punched and lines printed because it had intercepts all over the system, including in the various interrupt new PSWs.)

Anyway, while working at UPCC, I discovered that their charge back system had an interesting flaw: It did not begin to accumulate accounting stats for any job until that job did it's first read/write from/to a card reader, card punch or line printer (spool, actually). So...

If you could put all your "sysin" into files and write all your "sysprint" out to temporary files, and then have a single, final jobstep that would write all of those files, regardless of DCB attributes, to the printer, then you could save a boatload of money! (Real money, in the case of a commercial customer ...)

So I wrote DSCOPY... Needless to say, it did not take UPCC long to find/fix their bug.


DSCOPY was one of my earliest Assembler programs. I had just begun to learn Assembler only a year or two before. (I was a FORTRAN programmer before that.) When I wrote DSCOPY, there were two things I wanted to achieve. One was to be able to copy any number of sequential files having any arbitrary DCB attributes, and to transform those attributes in any way reasonable and as needed by the output files/devices. So I learned a lot about DCB OPEN exits.

The other was to make it blindingly fast! At the time, pretty much the only sequential copying program available from IBM was IEBGENER, and it was abysmally slow! The way it did I/O basically led it to read/write exactly one physical block per revolution of the DASD device. If the file happened to be unblocked then oh my gawd!

So in the process of trying to make DSCOPY fast, I had to learn about such things as DCBs, DEBs, IOBs, PCI CCW programming, chained scheduling and track capacity calculations. (A 2314, for example, held forty 80-byte blocks per track.) I still wound up just using QSAM, but I did it right. I used PUT-LOCATE mode buffering, I used OPTCD=C, and I used NCP=nnn where nnn was (where possible) the exact number of blocks that could fit on a track. So DSCOPY would usually be able to read/write an entire track's worth of data on a single rotation.

Nowadays, DSCOPY is still fast, but so is everyone else, so speed no longer is its advantage. But IMO it's still awful damned useful! Feel free to take it, try it, and use it. Let me know how it goes ...

Dave Cole              REPLY TO: [email protected]
ColeSoft               WEB PAGE: http://www.colesoft.com
736 Fox Hollow Road    VOICE:    540-456-8536
Afton, VA 22920        FAX:      540-456-6658

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to