There was a kinda-sorta challenge for me to write the most basic assembler 
program to copy a file.  Since I am no assembler programmer by any means, it of 
course took me some time to get it done.  Also I had no clue where to start.  
I'd say all total about 5 hours to get it finished.  This included reading 
docs, books, etc., coding and debugging.  And false starts.

You can imagine my immediate frustration when I went off into the EXCP world 
(by accident).  Then I cheated a little bit and had a peek at George Struble's 
_Assembler Language  Programming for The IBM System/370 Family_.   The 3rd 
edition printed 1984, 1st in 1964.

Then I found myself in the QSAM arena, and after that it was quite easy.   Here 
is my PGM and the two biggest problems I had:

COPYFILE START 0
         YREGS
COPYFILE CSECT ,
COPYFILE AMODE 24
COPYFILE RMODE 24
         DS    0H
         BAKR  R14,0               Save caller's ARs and GPRs
         LR    R12,R15             Set up 1st base register
         USING COPYFILE,R12        and inform assembler
         OPEN  (DCBIN1,(INPUT),DCBOUT1,(OUTPUT))
LOOP     DS    0H
         GET   DCBIN1,INOUTBUF
         PUT   DCBOUT1,INOUTBUF
         B     LOOP
EOF      DS    0H                  no more records
         CLOSE (DCBIN1,,DCBOUT1)
         XR    15,15
         PR    ,

DCBIN1   DCB BLKSIZE=80,DDNAME=INPUT,RECFM=FB,LRECL=80,DSORG=PS,       X
               EODAD=EOF,MACRF=GM
DCBOUT1  DCB BLKSIZE=80,DDNAME=OUTPUT,RECFM=FB,LRECL=80,DSORG=PS,      X
               MACRF=PM
INOUTBUF DS    CL80                 Input/Output Storage Area
         END   ,


Notes:
1.  That EODAD is nice.  As a matter of fact, this looks strangely a lot like a 
Cobol program.  I can almost see where Grace got her inspiration.
2.  Those horrible S0C4's.  First one was a S0C4-10, unknown module, and 
happened on the OPEN.  How could I have debugged this?  The problem that I 
found from reading (yes reading the docs, I do) the docs carefully, was that 
DCB's  have to be in 24 bit mode storage.  Whoops.  Where (and what kind of) in 
the dump would show that information?
3.  A S0C4-11 because I coded an MVC incorrectly.  I coded this:
     MVC           INOUTBUF(80),=C'Test record'
     INOUTBUF DS    CL80
     A change to MVC INOUTBUF(11),='Test record' works just fine.
     I cheated on this one, too.  I wasn't able to tell the problem in the 
dump.  The dump told me it was the MVC instruction that was wrong, so I just 
guessed that it was because the MVC wasn't correct.
4.  The MACRF options need to be correct, but the assembler warned me about 
those.  The docs showed all the options, not just QSAM, so I got them mixed up 
a little.  And I still need to know what MF=T means.  The book just says "watch 
this one."  I guess in 1969, that was enough.

Reply via email to