Let me preface this by saying I'm not really that familiar with newer
instructions.  But, I have a 40-year old subroutine that provided 15 string
manipulation functions for COBOL programs.  Now I am adding three more (one
of which came up in my previous post).  At the same time...

The previous support was for one function at a time, even though multiple
input strings were supported (i.e., a variable-length parm list; with the
first for a header work area [R8], the second for a large "master" buffer
[R9], and the third for the beginning of one or more "working"
string parameters[R10]; where R11 is the code base register but only needed
for the fixed storage area LOCTR'd to the beginning of the subroutine).

I would like to add a "mini-scripting" feature that allows one of 16
different functions to be performed on a string-by-string basis and in a
single CALL.  Naturally, this would have to be backward-compatible.  To do
this I changed the string DSECT to have a "redefined" layout--as follows:

TXTINPT  DSECT
         USING TXTINPT,R10        ESTABLISH REG 10 AS BASE
TXTSREQU DS    CL1                SCRIPTING REQUEST CODE
TXTSRETN DS    CL1                SCRIPTING RETURN CODE
TXTSSTRL DS    H                  SCRIPTING INPUT/OUTPUT STRING LENGTH
TXTSSTRG DS    256CL1             SCRIPTING INPUT/OUTPUT STRING
         ORG   TXTINPT
TXTSTRL  DS    H                  LEGACY INPUT/OUTPUT STRING LENGTH
TXTSTRG  DS    256CL1             LEGACY INPUT/OUTPUT STRING

So as not to have to duplicate *all* of the code, I figured I would just
save off the first two bytes and then increment R10 by 2 such that the last
two fields would work for both modes (and the last two fields are the ones
that are referenced by the remainder of the subroutine).

That is fine, but when I want to save the return code for the current
string and function, I initially coded it this way (I presume it is OK to
use regular arithmetic on an address)--and then continue on with whatever
else needs to be done next.

IF    TXTREQU,EQ,C'S'    IF IN SCRIPTING MODE
 SHI  R10,2               POINT TO SCRIPTING PARM AREA
 MVC  TXTSRETN,HOLDRETN   SAVE STRING RETURN CODE
 AHI  R10,2               POINT TO LEGACY LENGTH AND STRING
ENDIF                    ENDIF

But then I had a thought...  Is there any instruction that will let you
move (and examine) data to/in a location prior to a given address?  Now, I
saw where an AI generated a sample MVC instruction that used a negative
displacement, but I didn't know if that was legitimate?  Recommendations?

Sincerely,

Dave Clark
--
int.ext: 91078
direct: (937) 531-6378
home: (937) 751-3300

Winsupply Group Services
3110 Kettering Boulevard
Dayton, Ohio  45439  USA
(937) 294-5331

Reply via email to