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

Reply via email to