home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / sftick.zip / adv / mem / SHARED.C < prev    next >
Text File  |  1994-04-21  |  3KB  |  122 lines

  1. #define INCL_DOS
  2.  
  3. #include <os2.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7.  
  8. int main(void ) ;
  9.  
  10. #define QUEUE   "\\QUEUES\\CHILD.QUE"
  11.  
  12. int main()
  13.  
  14. {
  15.  
  16.    PVOID    pSharedMem ;
  17.    APIRET   rc ;
  18.    ULONG    ulFlags ;
  19.    ULONG    ulSize ;
  20.    ULONG    ulSession ;
  21.    PID      pidProcess ;
  22.    HQUEUE   hqQueue ;
  23.    STARTDATA    sdSession ;
  24.    CHAR     achFail[200] ;
  25.    REQUESTDATA rdRequestData ;
  26.    ULONG    ulDataGone ;
  27.    PVOID    pData ;
  28.    BYTE     bPriority ;
  29.  
  30.  
  31.    ulSize = 4096 ;
  32.    ulFlags = PAG_COMMIT | PAG_WRITE | PAG_READ ;
  33.  
  34.    rc = DosCreateQueue( &hqQueue,
  35.                         QUE_FIFO| QUE_CONVERT_ADDRESS,
  36.                         QUEUE ) ;
  37.  
  38.    printf("\nrc from DosCreateQueue = %d", rc ) ;
  39.  
  40.  
  41.    /* allocate some shared memory */
  42.  
  43.    rc = DosAllocSharedMem( &pSharedMem,
  44.                            "\\SHAREMEM\\MEMNAME",
  45.                            ulSize,
  46.                            ulFlags ) ;
  47.  
  48.    printf("\nrc from Alloc = %d, address = %p",
  49.             rc, pSharedMem ) ;
  50.  
  51.    /* this is so the printf shows up immediately */
  52.    fflush( stdout ) ;
  53.  
  54.    if (pSharedMem){
  55.         strcpy( pSharedMem, "Hello, Dave" ) ;
  56.         printf("\nString = %s", pSharedMem ) ;
  57.         fflush( stdout ) ;
  58.    }
  59.    /* start the program that will get the shared memory */
  60.    sdSession.Length = sizeof (STARTDATA ) ;
  61.    sdSession.Related = SSF_RELATED_CHILD ;
  62.    sdSession.FgBg = SSF_FGBG_FORE ;
  63.    sdSession.TraceOpt = SSF_TRACEOPT_NONE ;
  64.    sdSession.PgmTitle = "Shared Memory Program" ;
  65.    sdSession.PgmName = 0 ;
  66.    sdSession.PgmInputs = " /C sharee.exe" ;
  67.    sdSession.TermQ = QUEUE ;
  68.    sdSession.Environment = 0 ;
  69.    sdSession.InheritOpt = SSF_INHERTOPT_PARENT ;
  70.    sdSession.SessionType = SSF_TYPE_WINDOWABLEVIO ;
  71.    sdSession.IconFile = 0 ;
  72.    sdSession.PgmHandle = 0 ;
  73.    sdSession.PgmControl = SSF_CONTROL_SETPOS ;
  74.    sdSession.InitXPos = 10 ;
  75.    sdSession.InitYPos = 10 ;
  76.    sdSession.InitXSize = 300 ;
  77.    sdSession.InitYSize = 100 ;
  78.    sdSession.Reserved = 0 ;
  79.    sdSession.ObjectBuffer = achFail ;
  80.    sdSession.ObjectBuffLen = 200 ;
  81.  
  82.  
  83.    /* start sessions */
  84.    rc = DosStartSession( &sdSession,
  85.                          &ulSession,
  86.                          &pidProcess ) ;
  87.  
  88.    /* wait until session is ended */
  89.  
  90.    rc = DosReadQueue( hqQueue,
  91.                       &rdRequestData,
  92.                       &ulDataGone,
  93.                       &pData,
  94.                       0,
  95.                       DCWW_WAIT,
  96.                       &bPriority,
  97.                       NULLHANDLE ) ;
  98.  
  99.  
  100.  
  101.    DosCloseQueue( hqQueue ) ;
  102.  
  103.    /* clean up */
  104.    if (pSharedMem) {
  105.       rc = DosFreeMem( pSharedMem ) ;
  106.       printf("\nrc from DosFreeMem = %d", rc ) ;
  107.    } /* endif */
  108.    printf("\nPress any key..." ) ;
  109.    fflush( stdout ) ;
  110.    /* wait for a keypress */
  111.    getchar() ;
  112.    return ( 0 );
  113. }
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.