The working storage will remain initialized.

As long as your thread runs in the same address space and the COBOL LE enclave
keeps running, you should be able to pass the WS address.

On Wed, 7 May 2014 15:32:23 +0000 Scott Ford <[email protected]> wrote:

:>All:
:>
:>
:>I have written a C program using threads and have a question. I have an 
external message table that I need to be persistent between threads.  The 
message table is loaded from an external QSAM file. Program in Cobol loads the 
table. I want to be able to use the message table in other threads. Does anyone 
know is Working-Storage from one thread available to other threads ? 
:>
:>
:>
:>
:>
:>
:>/*------------------------------------------------------*/
:>/* program:    VOYTHR01 - modelled after pthread5       */
:>/* Company:    IDF                                      */
:>/* Author:     Scott Ford                               */
:>/* Date-Created: 05-05-??-2013                          */
:>/* Narative:   Calls cobol subprograms                  */
:>/*------------------------------------------------------*/
:>#define _OPEN_THREADS
:>#pragma runopts(POSIX(ON))
:>#include <pthread.h>
:>#include <stdio.h>
:>#include <stdlib.h>
:>#include <string.h>
:>#include <time.h>
:>void *msgload (void *threadid)
:>{
:>  printf("Thread entered  - Fine\n");
:>  int rc;
:>  char func[35];
:>  memset(func,0,sizeof(func));
:>  strcpy(func,"LOAD NONE NONE");
:>  printf("func: %s",func);
:>  rc = IDFMSGUT(func);
:>}
:>main()
:>{
:> pthread_t thread1;
:> int ret1;
:> int t;
:> t = 1;
:> ret1 = pthread_create( &thread1, NULL, *msgload, (void *)t);
:> if (ret1 == 0)
:>   { printf("Thread Created  - Fine\n");
:>   }
:> pthread_join(thread1,NULL);
:> exit(0)
:>
:>}
:>
:>
:>CBL NOC(E),FLAG(W),DATA(31),NODYN,RES,RENT,OPT,MAP,NOSSR
:>CBL NOZWB,NUM,NOTERM,NOVBREF,X,APOST,LIB,LIST
:>CBL THREAD
:>       IDENTIFICATION DIVISION.
:>       PROGRAM-ID.  IDFMSGUT IS RECURSIVE.
:>       AUTHOR.      IDENTITY-FORGE.
:>      ******************************************************************
:>      *    05/05/2014
:>      *    SF      - cloned voyager to build idfmsgdi module
:>      ******************************************************************
:>       ENVIRONMENT DIVISION.
:>       CONFIGURATION SECTION.
:>       SOURCE-COMPUTER. IBM-370.
:>
:>
:>       INPUT-OUTPUT SECTION.
:>       FILE-CONTROL.
:>            SELECT MSGTBL
:>                   ASSIGN       TO MSGTBL
:>                   ORGANIZATION IS SEQUENTIAL
:>                   FILE STATUS IS MSGTBL-STATUS.
:>       DATA DIVISION.
:>       FILE SECTION.
:>       FD  MSGTBL
:>           BLOCK CONTAINS 0
:>           RECORD CONTAINS 130 CHARACTERS.
:>       01  MSGTBL-INREC.
:>           05 MSGTBL-DATA  PIC X(130) VALUE SPACES.
:>       WORKING-STORAGE SECTION.
:>       LOCAL-STORAGE SECTION.
:>       01  MSGTBL-STATUS            PIC 99.
:>       01  MSGTBL-FLAG              PIC X VALUE 'X'.
:>           88 EOF-ON-MESSAGE        VALUE 'T'.
:>       01  MSGTBL-TBL.
:>           10 MSGS-IN OCCURS 200 TIMES INDEXED BY TBL-INDX.
:>              15 MSG-KEY            PIC X(6).
:>              15 MSG-ID             PIC X(9).
:>              15 MSG-TXT            PIC X(115).
:>       01  SEARCH-TXT               PIC X(116).
:>       01  SEARCH-KEY               PIC X(6).
:>       01  MSGCTR                   PIC 9999.
:>       01  TBL-KEY                  PIC X(8).
:>       01  X                        PIC 9999.
:>       01  LOAD-STAT                PIC 9.
:>       01  FUNC                     PIC X(6).
:>       01  MSGID                    PIC X(9).
:>       01  MSGVAR                   PIC X(20).
:>       LINKAGE SECTION.
:>       77  CSTRING                  PIC X(35).
:>       PROCEDURE DIVISION USING CSTRING.
:>             UNSTRING CSTRING
:>                DELIMITED BY X'00'
:>                INTO
:>                 FUNC
:>                 MSGID
:>                 MSGVAR
:>             END-UNSTRING.
:>             DISPLAY 'FUNC: ' FUNC
:>             IF FUNC(1:4) = 'LOAD' THEN
:>                PERFORM 010-LOAD-MSGTBL THRU 010-LOAD-MSGTBL-EXIT
:>                MOVE 0 TO LOAD-STAT
:>             END-IF.
:>             IF FUNC(1:6) = 'SEARCH' THEN
:>                PERFORM 010-SEARCH-MSGTBL THRU 010-SEARCH-MSGTBL-EXIT
:>             END-IF
:>             GOBACK.
:>       010-LOAD-MSGTBL.
:>           OPEN INPUT MSGTBL
:>                IF MSGTBL-STATUS = 0 THEN
:>                    DISPLAY 'IDFMSGUT Opened external msgtbl ok'
:>                    READ MSGTBL AT END
:>                       MOVE 'T' TO MSGTBL-FLAG
:>                    END-READ
:>                    MOVE 1 TO X
:>                    PERFORM UNTIL EOF-ON-MESSAGE
:>                       MOVE MSGTBL-INREC TO MSGS-IN (X)
:>                       DISPLAY 'MSGCTR: ' MSGCTR ' ' MSGTBL-INREC
:>                       ADD +1 TO MSGCTR
:>                       ADD 1 TO X
:>                          READ MSGTBL AT END
:>                             MOVE 'T' TO MSGTBL-FLAG
:>                          END-READ
:>                    END-PERFORM
:>                    DISPLAY 'IDFMSGUT Loaded: ' MSGCTR' Messages'
:>                    CLOSE MSGTBL
:>                END-IF.
:>       010-LOAD-MSGTBL-EXIT.
:>             EXIT.
:>       010-SEARCH-MSGTBL.
:>             SET TBL-INDX TO 1
:>             SEARCH MSGS-IN
:>                AT END PERFORM 010-MSGID-NOTFND THRU
:>                               010-MSGID-NOTFND-EXIT
:>                WHEN  MSG-KEY(TBL-INDX) = SEARCH-KEY
:>                   PERFORM 010-SRCHREP-VAR THRU
:>                           010-SRCHREP-VAR-EXIT
:>             END-SEARCH.
:>       010-SEARCH-MSGTBL-EXIT.
:>                EXIT.
:>       010-MSGID-NOTFND.
:>             DISPLAY 'MSG-KEY: ' MSG-KEY (TBL-INDX)
:>             DISPLAY ' >> MSG-KEY NOT FOUND ERROR <<'.
:>       010-MSGID-NOTFND-EXIT.
:>                EXIT.
:>       010-SRCHREP-VAR.
:>       010-SRCHREP-VAR-EXIT.
:>                EXIT.
:>
:>
:>
:>The above code as it stands works fine. I want MSGTBL to be persistent 
between threads.
:>
:>
:>Regards,
:>
:>Scott
:>
:>
:>www.identityforge.com
:>
:>----------------------------------------------------------------------
:>For IBM-MAIN subscribe / signoff / archive access instructions,
:>send email to [email protected] with the message: INFO IBM-MAIN

--
Binyamin Dissen <[email protected]>
http://www.dissensoftware.com

Director, Dissen Software, Bar & Grill - Israel


Should you use the mailblocks package and expect a response from me,
you should preauthorize the dissensoftware.com domain.

I very rarely bother responding to challenge/response systems,
especially those from irresponsible companies.

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to