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
