Oppolzer - Informatik / Blog


Blog-Hauptseite      Neuester Artikel      Älterer Artikel      Neuerer Artikel      Älterer gleiche Kategorie      Neuerer gleiche Kategorie

ASSEMBLER-L - Dateiende-Verarbeitung (EODAD) strukturiert einbauen (mit SP-Makros)

Subject:

Re: ASM Program to copy a file

From:

Bernd Oppolzer <bernd.oppolzer@T-ONLINE.DE>

Reply-To:

IBM Mainframe Assembler List <ASSEMBLER-LIST@LISTSERV.UGA.EDU>

Date:

2011.12.10 13:08:58


Some day I designed a large ASSEMBLER program which needed to read some QSAM
files, and I soon discovered that the out-of-line branches imposed by the EODAD
processing violated the clean structure of the program, because the input logic
of the many files which were read in parallel was somehow complicated. If, for
example, you deal with VSAM instead of QSAM, you have very natural return code
handling after each GET macro call, which allows structured programming, using
SP (structured programming) macros, for example.

To solve this problem, I ended up with a GET routine for every QSAM dataset,
where the EODAD address is part of the routine. The GET routine looked like this
(from memory, I don't have the sources at hand):

GET1     PSTART (R10,R14)    start macro for local procedure
         GET   DATASET1      get record from dataset
         XR    R15,R15       set eof rc to zero
         LR    R5,R1         move record address to reg 5
         LEAVE ,             success, leave proc (comma VERY important!!)
EOF1     DS    0H            = EODAD address of DATASET1
         LA    R15,8         end of file, set eof rc to 8
GET1Z    PSTOP (R10,R14)     end macro for local procedure

so the EODAD branch is hidden in the GET-ROUTINE.

In our shop, we tell the developer to write ASSEMBLER modules without B or J
instructions. All control flow is done using SP macros, which have been
developed or at least improved inhouse in the past 35 years (I don't know the
beginning of the history, because I'm with this company since 1988 "only").

Kind regards

Bernd

Blog-Hauptseite      Neuester Artikel      Älterer Artikel      Neuerer Artikel      Älterer gleiche Kategorie      Neuerer gleiche Kategorie