Since pointer arithmetic is performed in terms of object size, you want to
do the arithmetic on a char pointer because sizeof(char) is guaranteed to be
1.

So replace your statement
     ASXB=ASCB+0x6c;
with
     ASXB=(int*)((char*)ASCB+0x6c);
which means
   convert the type of the address in ASCB to a character pointer (value is
unchanged as is the contents of ASCB)
   add the desired offset (sum is still a character pointer)
   convert the sum to an integer pointer
   store the result

> -----Original Message-----
> From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On
> Behalf Of Barkow, Eileen
> Sent: Thursday, February 08, 2018 8:06 AM
> To: IBM-MAIN@LISTSERV.UA.EDU
> Subject: Silly C problem adding hex 6C
> 
> I am still trying to crawl my way around C/C++ and am just trying to do
one simple thing:
> add value 0X6C to a pointer address (which was originally supplied by this
list as a means
> to get the jobname).
>  something gets added to the pointer but it is not 0x6c.
> i tried all different combinations of char *; int *; void *; adding
decimal 108; but still get
> the same thing.
> 
> My little program correctly picks up the address of a valid ASCB
(00FCAA00) from the
> PSA.
> Now I just want to point to the address at 00FCAA6C which is a pointer to
the ASXB
> which contains the jobname at offset 0XC0.
> 
> But somehow I cannot add 6C to the ASCB pointer FCAA00 and get the ASXB
pointer at
> FCAA6C.
> Instead I get FCABB0 (or some other address depending on which ASCB is
obtained).
> Can some C guru please tell me what I am doing wrong?
> 
> i will post the program and results - this is running on UNIX/OMVS.
> 
> 
>  MVSZ MVSZ - Storage Contents : ACSCEXB -- (00FCAA00,,SQA)
-------------------
>  Command ===>                                                  Scroll ===>
PAG
> 
>  Address  Offset  0-1-2-3-  4-5-6-7-  8-9-A-B-  C-D-E-F-
0---4---8---C---
>  00FCAA00     +0  C1E2C3C2  00FBC100  00FCAB80  00000000  |
ASCB..A...¿Ø.... |
>  00FCAA10    +10  00000000  00000000  00000000  00000000  |
................ |
>  00FCAA20    +20  000002E4  00780000  000100FF  00000000  |
...U.Ì.......... |
>  00FCAA30    +30  7FF19E00  00000000  19A77000  00000000  |
"1Æ......xø..... |
>  00FCAA40    +40  00000000  00308F46  D3DC5674  8B346008  |
......±ãLüîÈ».-. |
>  00FCAA50    +50  00000000  00000000  00000000  00000000  |
................ |
>  00FCAA60    +60  00AFF158  FFFF8F80  00000000  00AFD000  |
.®1ì..±Ø.....®}. |
>  00FCAA70    +70  1D171020  00000000  00000000  00AFD520  |
.............®N. |
>  00FCAA80    +80  00000000  00000000  80AFFF98  40000000  | ........Ø®.q
... |
> 
>  result running jn2
> $ jn2
> ASCB = FCAA00
> ASXB =  FCABB0
> $
> 
> jn2.c program
> 
> #define _XOPEN_SOURCE
> #include <stdlib.h>
> #include <stdio.h>
> #include <string.h>
> #include <errno.h>
> #include <stdint.h>
> #include <iostream.h>
> int main(int argc, char *argv[])
>  {
> int *PSA;
> int      *ASCB;
> int      *ASXB;
> char jobname[9];
> PSA=(int *)0x224; /* address of PSAAOLD */
> ASCB=(int *)*PSA;
> printf("ASCB = %X\n",ASCB);
> ASXB=ASCB+0x6c;
> printf("ASXB =  %X\n",ASXB);
> }
> 
> to compile:
> c++ -+ -c -o jn2.o -I/u/eileen/j16/cons \
>  -I/usr/lpp/java/J8.0_64/include \
>  -W"c,lp64,dll,xplink,langlvl(longlong,nullptr)" jn2.c
> 
> to link:
> c++                                         \
> -W l,AMODE=64,lp64,LET=4,xplink,dynam=dll,case=mixed \
> -I=CELQS003.x \
> -o jn2            \
>   linkmods/CELQSTRT.o \
>  linkmods/CEESTART.o \
>  linkmods/CELQSG03.o \
>  linkmods/CELQINPL.o \
>  linkmods/CELQETBL.o \
>  linkmods/CELQLLST.o \
>  linkmods/CELQBST.o \
>  linkmods/CELQTRM.o \
>  jn2.o
> 
> 
> 
>   ________________________________
> 
> This e-mail, including any attachments, may be confidential, privileged or
otherwise legally
> protected. It is intended only for the addressee. If you received this
e-mail in error or from
> someone who was not authorized to send it to you, do not disseminate, copy
or otherwise
> use this e-mail or its attachments. Please notify the sender immediately
by reply e-mail and
> delete the e-mail from your system.
> 
> 
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to